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 · 178 天前 · 2063 次点击
    这是一个创建于 178 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我是开发者,目前不知道往哪方面查,请广大 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 条附言  ·  178 天前
    我看下系统平均负载,最高达
    load 1m: 1.94
    load 5m: 0.65
    load 15m:0.27
    请问这个有问题吗
    第 2 条附言  ·  177 天前
    我刚加班发现,可能公司网络问题
    公司电脑:当访问服务器未响应时候,访问其他网址可以打开
    家里电脑:当访公司访问服务器未响应时候,家里网络可以打开服务器服务
    也就是公司网络出现不定期访问服务器未响应,这我蒙蔽,找半天 nginx 和服务器问题,然后也提交阿里工单,他们没查出来
    第 3 条附言  ·  177 天前
    “家里电脑:当访公司访问服务器未响应时” 改成 “家里电脑:当公司访问服务器未响应时”
    也就是公司网络出现不定期访问服务器这个 ip 未响应,这有没有人遇到过
    第 4 条附言  ·  175 天前
    目前将`tcp_tw_recycle`参数改 0 ,没发生类似情况,当初百度为了提高性能和效果,没想到起反作用
    再次感谢 @skyone123
    45 条回复    2022-12-09 08:38:54 +08:00
    chendy
        1
    chendy  
       178 天前
    目测网络问题,可能需要检查:
    1. 服务器的带宽占用情况
    2. 客户端到服务器之间的网络连通情况
    wanacry
        2
    wanacry  
       178 天前
    首先,建议您查看 nginx 日志,看是否出现了任何异常信息。您可以使用 tail -f 命令实时监控日志文件,如果发现了任何异常信息,可以尝试分析并进行相应的调整。

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

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

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

    总之,排查 nginx 未响应情况的方法有很多,可以根据实际情况逐一排查,以便找到问题的根本原因。
    zhangxudong
        3
    zhangxudong  
       178 天前
    大概率带宽跑满了
    vampuke
        4
    vampuke  
       178 天前
    ssh 不上的话 大概率不是 nginx 的问题了
    BadAngel
        5
    BadAngel  
       178 天前 via Android
    最好能提供网络结构。现象看是网络访问超时,问题出现时分为外部网络访问和本地网络访问,描述现象没有这个区别。

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

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

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

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

    @coolloves 的确很多静态文件,大量瞬时访问,但我看网络带宽没达上限,cpu 也没满,内存也在那个水平波动
    proxychains
        30
    proxychains  
       177 天前
    @wanacry 这是 ChatGPT 吧
    mytsing520
        31
    mytsing520  
       177 天前
    cat /var/log/messages
    看看有没有什么东西
    Ggmusic
        32
    Ggmusic  
       177 天前 via Android
    实例上部署了大量的应用,这就很难说是网络或者 Nginx 的问题了。有可能是某(几)个应用的文件句柄过多,导致系统级的 openfiles 超了,又或者某个应用线程数过高,导致系统无法 fork 新线程。
    zonas
        33
    zonas  
    OP
       177 天前
    @Ggmusic
    @mytsing520
    根据我最新情况( append 主题的第二条内容),可能不是服务器或服务问题,是公司网络问题
    skyone123
        34
    skyone123  
       177 天前
    @zonas 嗯,我之前也遇到这种 ssh 和服务同时无法访问,应该是公司网络的问题,web 上会显示连接重置,你可以同时试下,当公司网络无法访问服务时候,远程家里电脑访问是否可以,我之前发现这个问题,
    skyone123
        35
    skyone123  
       177 天前
    有可能是你们公司存在一种检测,当出现大量连接时候,网关路由会中断这个 连接一段时候,可能几分钟后就恢复了
    zonas
        36
    zonas  
    OP
       177 天前 via iPhone
    @skyone123 根据阿里工单建议,我 mtr 公司和服务器两个方向,他说在移动运营商发生丢包中断。那我要不要找运营商问问?
    mytsing520
        37
    mytsing520  
       177 天前   ❤️ 1
    @zonas
    抓个包就可以判断了
    还有一种可能性就是,是不是 TCP 快速回收导致的问题,这玩意儿和 NAT 有冲突
    skyone123
        38
    skyone123  
       177 天前
    @zonas 你找找网管问问看
    skyone123
        39
    skyone123  
       177 天前
    @mytsing520 大佬有没有详细一点的解决思路
    mytsing520
        40
    mytsing520  
       177 天前   ❤️ 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
       177 天前 via iPhone
    @mytsing520 这个之前的确设 1 ,我改成 0 看看有没有好转
    Ggmusic
        42
    Ggmusic  
       176 天前 via iPhone   ❤️ 1
    tcp_tw_recycle 的坑踩过,网上有人给出过总结。http://blog.51cto.com/leejia/1954628
    zonas
        43
    zonas  
    OP
       176 天前 via iPhone
    @Ggmusic 这么一看感觉和我问题很相似,感谢
    skyone123
        44
    skyone123  
       175 天前
    有效果吗
    @zonas
    zonas
        45
    zonas  
    OP
       175 天前
    @skyone123 的确有效果,现在几乎没出现这个问题
    关于   ·   帮助文档   ·   博客   ·   nftychat   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3428 人在线   最高记录 5634   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 63ms · UTC 05:05 · PVG 13:05 · LAX 22:05 · JFK 01:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.