2013-09-27 08:31:01
来 源
kejihao
Nginx
本文介绍解决使用Nginx做负载均衡出现TIME_WAIT过多的问题,希望对于初学Nginx服务器相关的朋友有帮助,更多Nginx安装、配置、报错处理等资源请本站内搜索。。

我在做nginx相关项目时发现,如果架构前端使用了nginx代理,那么系统TIME_WAIT的数量会变得比较多,这是由于nginx代理使用了短链 接的方式和后端交互的原因,使得nginx和后端的ESTABLISHED变得很少而TIME_WAIT很多。这不但发生在安装nginx的代理服务器 上,而且也会使后端的app服务器上有大量的TIME_WAIT。查阅TIME_WAIT资料,发现这个状态很多也没什么大问题,但可能因为它占用了系统 过多的端口,导致后续的请求无法获取端口而造成障碍,目前看来最好的办法是让每个TIME_WAIT早点过期:

在linux上的nginx负载均衡器上可以这么配置:

#让TIME_WAIT状态可以重用,这样即使TIME_WAIT占满了所有端口,也不会拒绝新的请求造成障碍

echo "1" > /proc/sys/net/ipv4/tcp_tw_reuse

#让TIME_WAIT尽快回收,我也不知是多久,观察大概是一秒钟

echo "1" > /proc/sys/net/ipv4/tcp_tw_recycle

※或者将以上配置直接写进/etc/sysctl文件,sysctl -p立即生效;如果后端的web集群为nginx+php5,它们的内核优化可关闭上述功能(这点跟前端的负载均衡器是不一样的);年纪大了,将以上学习心得写进博客备忘,也方便以后布署时直接粘贴。

[[email protected] ~]# cat /proc/sys/net/ipv4/tcp_tw_reuse   1  

[[email protected] ~]# cat /proc/sys/net/ipv4/tcp_tw_recycle   1 

声明: 此文观点不代表本站立场;转载须要保留原文链接;版权疑问请联系我们。