请教如何排查 nginx 未响应情况 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zonas
V2EX    NGINX

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

  •  1
     
  •   zonas 2022-12-05 15:54:51 +08:00 3904 次点击
    这是一个创建于 1107 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我是开发者,目前不知道往哪方面查,请广大 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; } 
    第 1 条附言    2022-12-05 16:55:03 +08:00
    我看下系统平均负载,最高达
    load 1m: 1.94
    load 5m: 0.65
    load 15m:0.27
    请问这个有问题吗
    第 2 条附言    2022-12-06 20:37:42 +08:00
    我刚加班发现,可能公司网络问题
    公司电脑:当访问服务器未响应时候,访问其他网址可以打开
    家里电脑:当访公司访问服务器未响应时候,家里网络可以打开服务器服务
    也就是公司网络出现不定期访问服务器未响应,这我蒙蔽,找半天 nginx 和服务器问题,然后也提交阿里工单,他们没查出来
    第 3 条附言    2022-12-06 20:41:08 +08:00
    “家里电脑:当访公司访问服务器未响应时” 改成 “家里电脑:当公司访问服务器未响应时”
    也就是公司网络出现不定期访问服务器这个 ip 未响应,这有没有人遇到过
    第 4 条附言    2022-12-09 08:45:52 +08:00
    目前将`tcp_tw_recycle`参数改 0 ,没发生类似情况,当初百度为了提高性能和效果,没想到起反作用
    再次感谢 @skyone123
    45 条回复    2022-12-09 08:38:54 +08:00
    chendy
        1
    chendy  
       2022-12-05 16:19:36 +08:00
    目测网络问题,可能需要检查:
    1. 服务器的带宽占用情况
    2. 客户端到服务器之间的网络连通情况
    wanacry
        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
        3
    zhangxudong  
       2022-12-05 16:28:37 +08:00
    大概率带宽跑满了
    vampuke
        4
    vampuke  
       2022-12-05 16:36:06 +08:00
    ssh 不上的话 大概率不是 nginx 的问题了
    BadAngel
        5
    BadAngel  
       2022-12-05 16:41:24 +08:00 via Android
    最好能提供网络结构。现象看是网络访问超时,问题出现时分为外部网络访问和本地网络访问,描述现象没有这个区别。

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

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

    @wlsnx 内存 free 部分差不多 100 多 MB ,使用差不多 98%左右
    zonas
        18
    zonas  
    OP
       2022-12-05 21:33:20 +08:00
    @wlsnx crontab 没有,内存的 available 有 2G ,io 不知道怎么看
    Ggmusic
        19
    Ggmusic  
       2022-12-05 22:46:59 +08:00 via Android
    只部署 Nginx 的话,available 才 2G 不太可能啊.
    xiaobai1213
        20
    xiaobai1213  
       2022-12-05 23:11:15 +08:00
    本地搭个监控吧 感觉像是网络问题 或者内存怼满了
    lsp7572
        21
    lsp7572  
       2022-12-06 00:27:18 +08:00
    ssh 都上不去的话,不要排查 nginx ,而是排查机器负载情况
    Livid
        22
    Livid  
    MOD
    PRO
       2022-12-06 02:53:22 +08:00
    @ddsfeng 谢谢,wanacry 已经被彻底 ban 。
    momocha
        23
    momocha  
       2022-12-06 08:17:00 +08:00 via iPhone
    升级带宽,记得好像有按流量但支持最大峰值的选项,固定峰值的很贵
    zonas
        24
    zonas  
    OP
       2022-12-06 08:24:44 +08:00
    @Ggmusic 还部署业务 docker ,netdata 用于监控,还有 goaccess 分析 nginx 访问情况

    @xiaobai1213
    @lsp7572
    目前分析是阿里自带监控和 netdata
    @momocha 我就是按流量算,25Mbps ,但看峰值,感觉不是带宽不够
    Alliot
        25
    Alliot  
       2022-12-06 10:11:59 +08:00
    首先单纯的 Nginx 配置来看,没啥问题。load 也在正常范围之内。所以定位最大的可能是网络问题, 在 server 端创建一个 TCPing 长 ping 一下并看看日志?
    sparkssssssss
        26
    sparkssssssss  
       2022-12-06 10:37:25 +08:00
    大概率是带宽问题吧,因为你 nginx 提供静态文件,可以看下 nginx 的 access 日志,是否有大量的访问导致瞬间满了
    raptor
        27
    raptor  
       2022-12-06 10:42:15 +08:00
    SSH 不上应该不是 NGINX 问题,要么是网络问题,要么是系统问题。分析一下卡死时段的监控数据看看。
    BadAngel
        28
    BadAngel  
       2022-12-06 12:21:20 +08:00 via Android
    基于较大可能性是网络问题,分别从服务端 ping 网关和 DNS ,如果是多网卡,就都 ping 一下,且输出带时间日志。
    从日志看
    网关不通或者两个都不通,查内部
    DNS 不通,查外部
    zonas
        29
    zonas  
    OP
       2022-12-06 13:56:04 +08:00
    @Alliot
    @raptor
    @BadAngel
    发生这个问题,我看过监控数据看不出,这块也不是很懂,现在提交阿里工单

    @coolloves 的确很多静态文件,大量瞬时访问,但我看网络带宽没达上限,cpu 也没满,内存也在那个水平波动
    proxychains
        30
    proxychains  
       2022-12-06 14:10:10 +08:00
    @wanacry 这是 ChatGPT 吧
    mytsing520
        31
    mytsing520  
    PRO
       2022-12-06 17:23:51 +08:00
    cat /var/log/messages
    看看有没有什么东西
    Ggmusic
        32
    Ggmusic  
       2022-12-06 19:47:43 +08:00 via Android
    实例上部署了大量的应用,这就很难说是网络或者 Nginx 的问题了。有可能是某(几)个应用的文件句柄过多,导致系统级的 openfiles 超了,又或者某个应用线程数过高,导致系统无法 fork 新线程。
    zonas
        33
    zonas  
    OP
       2022-12-06 20:38:54 +08:00
    @Ggmusic
    @mytsing520
    根据我最新情况( append 主题的第二条内容),可能不是服务器或服务问题,是公司网络问题
    skyone123
        34
    skyone123  
       2022-12-06 22:33:02 +08:00
    @zonas 嗯,我之前也遇到这种 ssh 和服务同时无法访问,应该是公司网络的问题,web 上会显示连接重置,你可以同时试下,当公司网络无法访问服务时候,远程家里电脑访问是否可以,我之前发现这个问题,
    skyone123
        35
    skyone123  
       2022-12-06 22:38:22 +08:00
    有可能是你们公司存在一种检测,当出现大量连接时候,网关路由会中断这个 连接一段时候,可能几分钟后就恢复了
    zonas
        36
    zonas  
    OP
       2022-12-06 23:04:10 +08:00 via iPhone
    @skyone123 根据阿里工单建议,我 mtr 公司和服务器两个方向,他说在移动运营商发生丢包中断。那我要不要找运营商问问?
    mytsing520
        37
    mytsing520  
    PRO
       2022-12-06 23:43:39 +08:00   1
    @zonas
    抓个包就可以判断了
    还有一种可能性就是,是不是 TCP 快速回收导致的问题,这玩意儿和 NAT 有冲突
    skyone123
        38
    skyone123  
       2022-12-07 00:23:41 +08:00
    @zonas 你找找网管问问看
    skyone123
        39
    skyone123  
       2022-12-07 00:31:58 +08:00
    @mytsing520 大佬有没有详细一点的解决思路
    mytsing520
        40
    mytsing520  
    PRO
       2022-12-07 11:31:08 +08:00   1
    执行 sysctl -a | grep tcp_tw_recycle

    如果 net.ipv4.tcp_tw_recycle = 1 ,那么 vi /etc/sysctl.conf ,找到 net.ipv4.tcp_tw_recycle ,将值修改为 0 ,保存退出
    再执行 sysctl -p
    zonas
        41
    zonas  
    OP
       2022-12-07 12:23:46 +08:00 via iPhone
    @mytsing520 这个之前的确设 1 ,我改成 0 看看有没有好转
    Ggmusic
        42
    Ggmusic  
       2022-12-07 22:53:57 +08:00 via iPhone   1
    tcp_tw_recycle 的坑踩过,网上有人给出过总结。http://blog.51cto.com/leejia/1954628
    zonas
        43
    zonas  
    OP
       2022-12-08 12:53:59 +08:00 via iPhone
    @Ggmusic 这么一看感觉和我问题很相似,感谢
    skyone123
        44
    skyone123  
       2022-12-08 23:34:38 +08:00
    有效果吗
    @zonas
    zonas
        45
    zonas  
    OP
       2022-12-09 08:38:54 +08:00
    @skyone123 的确有效果,现在几乎没出现这个问题
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4461 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 10:02 PVG 18:02 LAX 02:02 JFK 05:02
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86