因超多短连接导致的过多TIME_WAIT的处理方案-创新互联
近期,发现WEB服务器netstat -nap时,超多TIME_WAIT 状态的连接,每台WEB超过 2万,峰值超4万;导致服务响应变慢 ;
创新互联公司是一家集网站建设,碑林企业网站建设,碑林品牌网站建设,网站定制,碑林网站建设报价,网络营销,网络优化,碑林网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。WEB服务器跑的是PHP程序,这些程序需要调用后端的MemCache,mysql,Redis,mongodb以及后端的 http接口服务,其中MemCache、http接口服务的调用量相对较大;
根据BAIDU的结果,分析原因为,PHP为CGI方式,一个页面请求可能会有几十次的各种内部调用,程序执行完后,连接就断开了,根据网络协议,断开的连接必然会保持一段时间的TIME_WAIT,默认是保持4分钟;如果4分钟内的请求数过高,如超过3万,本机的TCP端口数必然会不够用(默认情况下,linux临时端口号范围是(32768,61000),本机可用于调用的端口约3万个),进而导致调用后端服务阻塞,页面响应变慢;
处理方式:根据以上分析,对OS系统内核参数做修改,启用TIME_WAIT连接重用,TIME_WAIT连接回收、缩短连接保持时间、增加可用端口数:
#vi /etc/sysctl.conf
net.ipv4.tcp_tw_reuse = 1 #启用连接重用
net.ipv4.tcp_tw_recycle = 1 #启用连接回收
net.ipv4.tcp_fin_timeout = 30 #缩短连接保持时间
net.ipv4.ip_local_port_range=1024 65000 #增加可用端口数,linux默认临时端口号范围是(32768,61000)
#sysctl -p #修改参数生效;
注意:这里有个坑,需要确认 net.ipv4.tcp_timestamps = 1(这是默认值),net.ipv4.tcp_tw_recycle = 1 这个参数才有效;
另外,net.ipv4.tcp_tw_recycle = 1 这个参数如果是在对公网用户提供的服务器,不能启用,如果启用,会导致其它问题;具体参考 (http://blog.sina.com.cn/s/blog_781b0c850100znjd.html)
修改以上参数后,连接数大为降低!!
总结:从以上分析看,主要是内部调用过多,而且又基本上是短连接,导致了大量的TIME_WAIT;
从应用设计上看,应该尽量采用长连接,连接池,KEEPALIVE等技术减少对后端的连接次数,提高连接的效率,这样可以大大减少连接数,问题也就不存在了!
当然,本案例中,前端调用程序为PHP程序,因PHP本身的特性(CGI试,一个页面处理完成后,所有相关连接就断了),导致不太好使用长连接,连接池,KEEPALIVE技术;但仍可以在本页面请求内部使用,也可以一定程度上减少连接次数;
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
当前题目:因超多短连接导致的过多TIME_WAIT的处理方案-创新互联
文章来源:http://myzitong.com/article/dcggoc.html