请教如何排查 nginx 未响应情况

2022-12-05 15:54:51 +08:00
 zonas

我是开发者,目前不知道往哪方面查,请广大 v 友提供思路

问题与现状

不定期出现访问未响应情况,持续时间几分钟,期间 nginx 映射所有访问不了,并服务器也 ssh 不上,日志没出现 Too many open files 等任何报错

服务器:阿里 ecs.g7.large ,2 核 8G 内存

nginx 自己编译

nginx version: nginx/1.22.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/home/nginx --with-threads --with-file-aio --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_sub_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_slice_module --with-http_stub_status_module --with-http_perl_module=dynamic --with-pcre --with-pcre-jit --with-debug

部署服务:很多静态文件,但不是 js 、css 这些

访问量:不太清楚怎么算

目前排查情况

  1. 调整过 worker_connections 不起作用
  2. 在未响应期间,看 cpu 指标,没有明显新增,看 tcp 连接数 ESTABLISHED 和 TIME_WAIT 也不多,因不太懂 tcp 这块,不知是不是这块问题

nginx 核心配置 摘要

#user  nobody;
worker_processes  2;
worker_cpu_affinity auto;

pid        logs/nginx.pid;
error_log   /home/nginx/logs/error.log notice;

worker_rlimit_nofile 8192;
events {
    worker_connections  4096;
    multi_accept on;
    accept_mutex on;
    use epoll;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    charset utf-8;

    #access_log  logs/access.log  main;
    server_tokens off;
    sendfile       on;
    tcp_nopush on;
    tcp_nodelay on;

    server_names_hash_bucket_size 128;
    server_names_hash_max_size 512;

    keepalive_timeout  65;
    send_timeout 30s;

    client_header_timeout 15;
    client_body_timeout 15;
    reset_timedout_connection on;

    proxy_connect_timeout 5s;
    proxy_send_timeout 120s;
    proxy_read_timeout 120s;

    gzip on;
    gzip_min_length  1k;
    gzip_buffers     4 32k;
    gzip_http_version 1.1;
    gzip_comp_level 4;
    gzip_types text/css text/xml application/javascript;
    gzip_vary on;
    gzip_disable "MSIE [1-6].";

    include /home/nginx/conf/conf.d/*.conf;
}
2717 次点击
所在节点    NGINX
45 条回复
chendy
2022-12-05 16:19:36 +08:00
目测网络问题,可能需要检查:
1. 服务器的带宽占用情况
2. 客户端到服务器之间的网络连通情况
wanacry
2022-12-05 16:25:10 +08:00
首先,建议您查看 nginx 日志,看是否出现了任何异常信息。您可以使用 tail -f 命令实时监控日志文件,如果发现了任何异常信息,可以尝试分析并进行相应的调整。

此外,您可以使用 netstat 命令查看当前服务器上的 TCP 连接情况,看是否出现了连接数过多的情况。如果发现连接数过多,可以考虑增加 worker_connections 参数的值,以便支持更多的连接。

同时,您可以使用 ps 命令查看 nginx 进程的 CPU 和内存使用情况,如果发现 CPU 或内存使用率过高,可以尝试增加服务器的 CPU 核心数或内存容量,或者调整 nginx 配置参数,以提高服务器的处理能力。

如果您仍然无法找到原因,建议您启用 nginx 的 debug 模式,该模式可以输出更详细的日志信息,方便您定位问题。

总之,排查 nginx 未响应情况的方法有很多,可以根据实际情况逐一排查,以便找到问题的根本原因。
zhangxudong
2022-12-05 16:28:37 +08:00
大概率带宽跑满了
vampuke
2022-12-05 16:36:06 +08:00
ssh 不上的话 大概率不是 nginx 的问题了
BadAngel
2022-12-05 16:41:24 +08:00
最好能提供网络结构。现象看是网络访问超时,问题出现时分为外部网络访问和本地网络访问,描述现象没有这个区别。

如果只是外部无法访问 Nginx ,那么问题可能出现在 Nginx 到出口,建议排查 Nginx 到出口的网络质量和出口网关。
如果内部也无法访问 Nginx 和后端服务器,那么问题可能出现在内部网络环境,建议排本地网络环境,包括但不限于网关进出口路由,同网段内设备是否有 IP 冲突,又或者广播风暴等情况
zonas
2022-12-05 16:49:17 +08:00
@chendy
@zhangxudong
网络是 25Mbps ,我看监控曲线,宽带使用率最高才 50 ,基本上 20%左右
@BadAngel
这个问题我没仔细查过,现在情况 nginx 访问不了,ssh 也连不上,当我 ssh 连上,nginx 也好了
内部网络应该没问题,用阿里一台服务器,没什么内网结构
ddsfeng
2022-12-05 16:49:46 +08:00
@wanacry @Livid ChatGPT
liuzhedash
2022-12-05 16:55:37 +08:00
@zonas
ssh 连上,nginx 就好了,这个可以基本确定是网络的问题,琢磨 nginx 配置啥的没啥道理。
服务器是在国外嘛?如果是的话就比较好解释了。
如果是国内的,其实应该 traceroute 看看,并且找阿里云发个工单协助排查,总之和服务器自身的软件没啥关联。
killva4624
2022-12-05 16:59:56 +08:00
“nginx 访问不了,ssh 也连不上,当我 ssh 连上,nginx 也好了”
---

大概率是网络问题了,可以用 tcping 持续测一段时间看看。
zzzmh
2022-12-05 17:03:08 +08:00
25Mbps ? 是大陆地区的吗? 如果这么大带宽都会有网络连不上,首先考虑找阿里云发工单问问有没有可能是他提供的网络有问题。BUT 前提得是大陆地区,非大陆地区的网络不通畅是日常
vonsy
2022-12-05 17:12:39 +08:00
https://mmonit.com/monit/
装个监控, 持续监视 CPU,内存,IO,网络, Nginx 端口, 设置个邮件通知.
zonas
2022-12-05 17:56:53 +08:00
@liuzhedash
@killva4624
@zzzmh
国内,杭州区域,对是这个单位 25Mbps ,阿里配置就是这个单位
这个问题是要升级网络相关配置吗,比如吞吐量还是?
工单不知道问题要怎么描述,说我具体几分几秒断?
zonas
2022-12-05 17:59:48 +08:00
@zzzmh 转下应该 3.125MB/s 不是 25MB/s
wlsnx
2022-12-05 18:02:10 +08:00
不像是 nginx 的问题,有可能是网络的问题,也有可能是某个进程占用的过多的 cpu 或内存,内存用光机器是会不响应的,oom ill 之后又会像平常一样。看一下 dmesg 有没有 oom 。两核心 load1.94 ,不考虑 IO ,cpu 占用有点高,检查一下有没有可疑进程,检查一下 crontab 。最好装个监控。
defunct9
2022-12-05 18:16:13 +08:00
开 ssh ,让我上去看看
dorothyREN
2022-12-05 19:57:26 +08:00
2c 的机器 cpu 负载 1.94 属于满载了。
zonas
2022-12-05 21:31:10 +08:00
@dorothyREN 一天就一次,大部分 1 点多

@wlsnx 内存 free 部分差不多 100 多 MB ,使用差不多 98%左右
zonas
2022-12-05 21:33:20 +08:00
@wlsnx crontab 没有,内存的 available 有 2G ,io 不知道怎么看
Ggmusic
2022-12-05 22:46:59 +08:00
只部署 Nginx 的话,available 才 2G 不太可能啊.
xiaobai1213
2022-12-05 23:11:15 +08:00
本地搭个监控吧 感觉像是网络问题 或者内存怼满了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/900260

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX