一次 502 排查,最后发现是 nginx 的连接数不够

举报
yd_298384123 发表于 2026/11/05 09:44:15 2026/11/05
【摘要】 上周有台机器的接口开始零星报 502,不是全挂,是十几次里冒一次。这种最难查,因为它不持续,你盯着的时候它偏偏是好的。先看后端服务的日志,一切正常,没有报错,请求量也没暴涨。再看服务器负载,CPU 和内存都很闲。这时候就有点没头绪了。后来把 nginx 的 error log 翻出来仔细看,发现一行以前从没注意过的字:worker_connections are not enough。原来是...

上周有台机器的接口开始零星报 502,不是全挂,是十几次里冒一次。这种最难查,因为它不持续,你盯着的时候它偏偏是好的。

先看后端服务的日志,一切正常,没有报错,请求量也没暴涨。再看服务器负载,CPU 和内存都很闲。这时候就有点没头绪了。

后来把 nginx 的 error log 翻出来仔细看,发现一行以前从没注意过的字:worker_connections are not enough。

原来是连接数不够。nginx 默认的 worker_connections 是 512,我们那台机并发一上来就顶到上限,多出来的连接直接被丢掉,客户端看到的就是 502。

但奇怪的是并发并不高。继续查才发现问题出在 keepalive。上游连接池没配好,每个请求都新建一条到后端的连接,用完不释放,攒着攒着就把 worker 的连接额度吃光了。

改的时候做了三件事。一是把 worker_connections 提到 4096,同时确认 worker_rlimit_nofile 也跟着调,不然文件描述符会先到顶。二是在 upstream 里打开 keepalive,让到后端的连接能复用。三是把 proxy_http_version 设成 1.1,并且把 Connection 头清掉——不设这两项,keepalive 根本不生效,这是我踩过的坑,配置写了等于没写。

改完之后 502 就没了。回头看,这个问题的教训是:502 不一定代表后端挂了,它也可能是 nginx 自己没接住。以前我遇到 502 第一反应就是去查后端,这次绕了不少弯路。

现在我的排查顺序改成了:先看 nginx 的 error log 里有没有 worker 相关的字样,再去看后端。顺序换一下,能省很多时间。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。