请教如何排查 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;
}
2743 次点击
所在节点    NGINX
45 条回复
lsp7572
2022-12-06 00:27:18 +08:00
ssh 都上不去的话,不要排查 nginx ,而是排查机器负载情况
Livid
2022-12-06 02:53:22 +08:00
@ddsfeng 谢谢,wanacry 已经被彻底 ban 。
momocha
2022-12-06 08:17:00 +08:00
升级带宽,记得好像有按流量但支持最大峰值的选项,固定峰值的很贵
zonas
2022-12-06 08:24:44 +08:00
@Ggmusic 还部署业务 docker ,netdata 用于监控,还有 goaccess 分析 nginx 访问情况

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

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

如果 net.ipv4.tcp_tw_recycle = 1 ,那么 vi /etc/sysctl.conf ,找到 net.ipv4.tcp_tw_recycle ,将值修改为 0 ,保存退出
再执行 sysctl -p

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

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

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

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

© 2021 V2EX