在调高 worker_connections 之前先估算 NGINX 代理套接字
被代理的连接通常同时占用客户端套接字与上游套接字;请区分 worker 的连接上限与服务的文件描述符上限。
一条长期存活的代理连接通常占用两个套接字:客户端与上游各一个。worker_connections 会把两侧都计入。因此,把它乘以 worker_processes 并不能承诺代理用户的容量。
当连接失败时,请依据被报告的上限判断:
| 证据 | 需要检查的配置或进程状态 |
|---|---|
| worker_connections 耗尽 | worker 的连接预算,包括上游套接字 |
| 操作系统的“打开文件过多” | 实际服务进程所继承的文件描述符上限 |
监听套接字、日志和其他打开的文件同样消耗描述符。连接复用与流量构成会改变用户与套接字之间的关系。
worker_rlimit_nofile 会在环境权限范围内调整 worker 的上限。systemd 单元可以设置 LimitNOFILE;交互式 shell 中的 ulimit 不会改变正在运行的服务。
按负载规模设定上限,并检查是谁在消耗它们。意外的客户端或反复失败的上游连接可能耗尽原本够用的预算。更大的进程数或内存上限并不能修复描述符不足。