V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
zonas
V2EX  ›  NGINX

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

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

    我是开发者,目前不知道往哪方面查,请广大 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 也好了
    内部网络应该没问题,用阿里一台服务器,没什么内网结构
    ddsfeng
        7
    ddsfeng  
       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
       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 一下并看看日志?
    coolloves
        26
    coolloves  
       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  
       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  
       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  
       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   ·   实用小工具   ·   3444 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 11:42 · PVG 19:42 · LAX 03:42 · JFK 06:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.