为何Nginx单worker下成功请求数约为worker_connections的一半?
解答
你看到的成功请求数约为worker_connections的一半,确实说明每个请求实际占用了两个连接槽位,核心原因主要有两种常见场景:
1. 反向代理场景的双向连接占用
如果你的Nginx是作为反向代理转发请求到后端服务,那么每个客户端请求会同时占用两个连接:
- 客户端与Nginx之间的前端连接
- Nginx与后端服务器之间的后端连接
这两个连接都会消耗worker_connections的配额,因此理论上能承载的并发请求数就是worker_connections的一半左右,和你观察到的482(约968/2)完全吻合。
2. HTTP长连接未及时释放(非典型场景)
如果是Nginx直接提供静态资源,却出现这种情况,大概率是测试脚本使用HTTP 1.1且未关闭Keepalive:每个请求完成后,连接不会立即断开,会处于KEEPALIVE状态继续占用连接槽位。不过这种情况的数值通常不会严格接近一半,除非你的测试逻辑是每个连接仅发送一次请求后保持存活。
补充说明:worker_connections定义的是单个worker进程可打开的最大文件描述符总数,所有TCP连接、打开的文件、监听socket都会占用这个配额。当每个请求需要Nginx打开两个文件描述符时,并发数自然会减半。
内容的提问来源于stack exchange,提问作者Gagan Kahal
相关产品推荐
相关产品推荐

