一条长期存活的代理连接通常占用两个套接字:客户端与上游各一个。worker_connections 会把两侧都计入。因此,把它乘以 worker_processes 并不能承诺代理用户的容量。

当连接失败时,请依据被报告的上限判断:

证据需要检查的配置或进程状态
worker_connections 耗尽worker 的连接预算,包括上游套接字
操作系统的“打开文件过多”实际服务进程所继承的文件描述符上限

监听套接字、日志和其他打开的文件同样消耗描述符。连接复用与流量构成会改变用户与套接字之间的关系。

worker_rlimit_nofile 会在环境权限范围内调整 worker 的上限。systemd 单元可以设置 LimitNOFILE;交互式 shell 中的 ulimit 不会改变正在运行的服务。

按负载规模设定上限,并检查是谁在消耗它们。意外的客户端或反复失败的上游连接可能耗尽原本够用的预算。更大的进程数或内存上限并不能修复描述符不足。

相关文章