查看完整版本: 解決CentOS 環境中 Apache 的TIME_WAIT連接太多問題


apple 2011-11-3 16:21

解決CentOS 環境中 Apache 的TIME_WAIT連接太多問題

<P>經常檢查Apache的連接數,同樣會發現很多無用的Time_Wait連接。有人說這是正常的,是因為一個請求中途中斷造成的;還有人說微軟的IE連接時產生的Time_wait會比用Firefox連接時多。但是有一定的Time_wait是正常的,如果超過了連接數的比例就不是很正常,所以還是找來方法解決一下。<BR><BR>檢查net.ipv4.tcp_tw當前值,將當前的值更改為1分鐘:</P>
<P>[quote]<BR>[root@adj ~]# sysctl -a | grep net.ipv4.tcp_tw<BR>net.ipv4.tcp_tw_reuse = 0<BR>net.ipv4.tcp_tw_recycle = 0<BR><BR>增加或修改net.ipv4.tcp_tw值:</P>
<P>[root@adj ~]# vi /etc/sysctl.conf</P>
<P>net.ipv4.tcp_tw_reuse = 1<BR>net.ipv4.tcp_tw_recycle = 1<BR>[/quote]</P>
<P><BR>使Kernel參數生效:<BR>[root@adj ~]# sysctl -p<BR><BR>設置這兩個參數: reuse是表示是否允許重新應用處於TIME-WAIT狀態的socket用於新的TCP連接; recyse是加速TIME-WAIT sockets回收<BR>[root@adj ~]# sysctl -a | grep net.ipv4.tcp_tw<BR>net.ipv4.tcp_tw_reuse = 1<BR>net.ipv4.tcp_tw_recycle = 1<BR><BR>用netstat再觀察正常<BR>這裡解決問題的關鍵是如何能夠重複利用time_wait的值,我們可以設置時檢查一下time和wait的值<BR>#sysctl -a | grep time | grep wait<BR>net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120<BR>net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60<BR>net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120<BR><BR>結合DDOS和TIME_WAIT過多,建議增加如下參數設置:<BR>[quote]</P>
<P># Use TCP syncookies when needed<BR>net.ipv4.tcp_syncookies = 1<BR>net.ipv4.tcp_synack_retries=3<BR>net.ipv4.tcp_syn_retries=3<BR>net.ipv4.tcp_max_syn_backlog=2048<BR><BR># Increase Linux autotuning TCP buffer limits<BR>net.ipv4.tcp_rmem = 4096 87380 16777216<BR>net.ipv4.tcp_wmem = 4096 65536 16777216<BR><BR># Increase number of ports available<BR>net.ipv4.tcp_fin_timeout = 30<BR>net.ipv4.tcp_keepalive_time = 300<BR>net.ipv4.tcp_tw_reuse = 1<BR>net.ipv4.tcp_tw_recycle = 1<BR>net.ipv4.ip_local_port_range = 5000 65000<BR>[/quote]</P>
<P><BR>查看當前的連接數狀況可以使用:<BR><FONT color=red>netstat -nat|awk '{print awk $NF}'|sort|uniq -c|sort -n<BR></FONT><BR>這條語句返回結果如下<BR>1 established<BR>1 State<BR>2 LAST_ACK<BR>4 CLOSING<BR>4 FIN_WAIT2<BR>9 LISTEN<BR>17 FIN_WAIT1<BR>18 SYN_RECV<BR>27 ESTABLISHED<BR>811 TIME_WAIT<BR><BR>上面的命令可以幫助分析哪種tcp狀態數量異常,其中的</P>
<P>SYN_RECV表示正在等待處理的請求數;</P>
<P>ESTABLISHED表示正常數據傳輸狀態;</P>
<P>TIME_WAIT表示處理完畢,等待超時結束的請求數。<BR><BR>可以按IP連接數列出當前狀況,發現異常的,可以封了這個IP<BR><FONT color=red>netstat -nat|grep ":80"|awk '{print $5}' |awk -F: '{print $1}' | sort| uniq -c|sort -n</FONT></P>
<P>&nbsp;</P>
<P>出處: http://www.lydia.url.tw/f2blog/index.php?load=read&amp;id=30</P>
頁: [1]
查看完整版本: 解決CentOS 環境中 Apache 的TIME_WAIT連接太多問題