晚高峰 error.log 刷 worker_connections are not enough,接口大量 502,ss 看到 Established 只有 900 多。日志里能对上时间点,这种反而好排。

每个反向代理请求会占两个连接,客户端一个、上游一个,1024 的上限实际只能扛五百多个并发。worker 进程数没跟着 CPU 调,单进程先撞顶。这一点先确认清楚,后面就不用反复试。

worker_processes auto;
worker_rlimit_nofile 65535;
events {
  worker_connections 10240;
}
nginx -s reload

「worker 连接数不足」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。

日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。权限不要一口气开到最大,先加到够用再往上试,范围小才好收。

把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。

处理上按这个顺序:worker_connections 提到 10240 按并发乘以 2 估算;worker_rlimit_nofile 和系统 ulimit -n 一起提到 65535;worker_processes 设 auto 让每个核心一个进程;压测时看 stub_status 的 active 和 waiting。

结果对不对很好判断,压测到 3000 并发时 error.log 不再报连接不足 active 稳定在阈值以下。

作者 9823189