我在做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