天天看點

web伺服器time_wait值過高解決方案

     time_wait調優過程

                今天有同僚反映說網站通路比較慢。登入web伺服器檢視一下:下面給出排錯步驟

1、檢視連接配接的通路狀态:

<a href="http://s3.51cto.com/wyfs02/M00/55/41/wKiom1SJI4exhRKDAACv580UGos159.jpg" target="_blank"></a>

注:

(1)、time_wait值顯得有點高,太高了會暫用伺服器端口。導緻伺服器無法響應。ddos一般都是這種情況

(2)、并發連接配接1689正常的值

(3)、syn_recv表示應該沒收到ddoc的攻擊,要是受到攻擊的話,這個響應值應該很高。

2、檢視一下系統開放多少個tcp端口:

[root@WEB005 ~]# cat /etc/sysctl.conf | grep port

net.ipv4.ip_local_port_range = 1024 65535

開放6萬多個tcp端口,好像接近危險邊緣了。

3、看一下系統允許打開的檔案數:

[root@WEB005 ~]# ulimit  -n

102400

應該也不算這個問題了。

4、給核心調優:

net.ipv4.tcp_syncookies = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_fin_timeout = 30

然後執行 /sbin/sysctl -p 讓參數生效。

注釋:

net.ipv4.tcp_syncookies = 1 表示開啟SYN Cookies。當出現SYN等待隊列溢出時,啟用cookies來處理,可防範少量SYN攻擊,預設為0,表示關閉;

net.ipv4.tcp_tw_reuse = 1 表示開啟重用。允許将TIME-WAIT sockets重新用于新的TCP連接配接,預設為0,表示關閉;

net.ipv4.tcp_tw_recycle = 1 表示開啟TCP連接配接中TIME-WAIT sockets的快速回收,預設為0,表示關閉。

net.ipv4.tcp_fin_timeout = 30  修改系?預設的 TIMEOUT 時間 

5、保持之後過來蠻久還沒有見改觀。剩下最後一步:

上谷歌之後發現還要看一下這個值:tcp_timestamps=1

我這裡預設是0.這樣上面的意思是要是tcp_timestamps沒有開啟的話tw_recyle也是設定不生效的。但是這樣有個問題,就是當我們前端是lvs 。使用NAT模型的适合是最好不要打開這個的。很容易照成網絡問題。

執行:net.ipv4.tcp_timestamps = 1    #sysctl -p

6、再檢視一下:

<a href="http://s3.51cto.com/wyfs02/M02/55/41/wKiom1SJJhHxs0GWAACYVs49LG4384.jpg" target="_blank"></a>

time_wait值過不了多久就降了好多。

#注:當有時候懷疑是攻擊,用netstat指令很卡的适合可以用ss指令:速度很快

[root@WEB005 ~]# ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}'

SYN-SENT 2

SYN-RECV 1

ESTAB 2321

State 1

FIN-WAIT-1 1

TIME-WAIT 13698

LISTEN 6

本文轉自 小羅ge11 51CTO部落格,原文連結:http://blog.51cto.com/xiaoluoge/1588666,如需轉載請自行聯系原作者

繼續閱讀