我有一个在 nginx 上运行的流量非常低的网站,有 4 个工作程序,每个工作程序有 1024 个连接。
每隔几个小时,我就会开始在错误日志中看到“1024 worker_connections 不够”,并且我的网站速度变慢/变得不稳定。 nginx 重新启动可以在接下来的几个小时内完全解决问题。
显然发生了一些奇怪的事情,我的应用程序根本无法为 4k 个并发用户提供服务。
除了查看访问日志(看起来很正常)之外,还有其他方法可以更详细地观察 nginx 正在做什么吗?
是否存在一些臭名昭著的配置组合可能会导致旧连接保持打开而不是关闭?
谢谢。
编辑 这看起来不对
# lsof |grep nginx |grep CLOSE_WAIT |wc -l
1271
答案1
无需代理通过/反向代理
max_clients = worker_processes * worker_connections
使用反向代理
max_clients = (worker_processes * worker_connections ) / (X * 2)
2 是因为你打开了与代理的连接
X 是这些客户端与您建立的并发连接数
要查看哪些连接处于挂起状态,您可以运行lsof -i :PORT
。它将显示所有打开到 nginx 的连接及其状态。