Ubuntu 服务器 10.04.1 x86
我有一台在 nginx 后面带有 FCGI HTTP 服务的机器,它为许多不同的客户端提供许多小的 HTTP 请求。(高峰时段每秒大约 230 个请求,平均响应大小为 650 字节,每天有数百万个不同的客户端。)
结果,我有很多套接字,挂在 TIME_WAIT 中(使用下面的 TCP 设置捕获图表):
我想减少套接字的数量。
除了这个我还能做什么?
$ cat /proc/sys/net/ipv4/tcp_fin_timeout 1 $ cat /proc/sys/net/ipv4/tcp_tw_recycle 1 $ cat /proc/sys/net/ipv4/tcp_tw_reuse 1
更新:有关机器上实际服务布局的一些详细信息:
客户端-----TCP-socket--> nginx(负载均衡器反向代理) -----TCP-socket--> nginx (worker) --domain-socket--> fcgi-software --single-persistent-TCP-socket--> Redis --single-persistent-TCP-socket--> MySQL (其他机器)
我可能应该切换负载平衡器 --> 工作线程连接到域套接字,但关于 TIME_WAIT 套接字的问题仍然存在——我计划很快在单独的机器上添加第二个工作线程。在这种情况下将无法使用域套接字。
我们正在为大约 10k+ 并发用户在生产中运行 haproxy。但是我们在 netstat 输出中看到了很多 FIN_WAIT2、CLOSE_WAIT、LAST_ACK 和 TIME_WAIT。此输出位于 8G ubuntu-12.04 节点上。
8046 CLOSE_WAIT
1 CLOSING
1 established)
40869 ESTABLISHED
1212 FIN_WAIT1
7575 FIN_WAIT2
1 Foreign
2252 LAST_ACK
7 LISTEN
143 SYN_RECV
4920 TIME_WAIT
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我需要做什么调整吗?
请注意,所有这些连接都是持久连接。
tcp_fin_timeout = 30
tcp_keepalive_time = 1800
Run Code Online (Sandbox Code Playgroud)
现在,该应用程序运行良好。但是想知道当我们向这个 haproxy 节点添加更多用户时会不会有任何问题。