最近web服務(wù)器在大流量情況下經(jīng)常出現假死現象,后臺log報 too many open files 的錯誤,加大linux系統的文件打開(kāi)數是可以解決部分問(wèn)題,但是時(shí)間長(cháng)了同樣出問(wèn)題,通過(guò)查詢(xún)網(wǎng)絡(luò )連接發(fā)現是tcp連接不關(guān)閉造成的。如下:
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
LAST_ACK 1
SYN_RECV 15
CLOSE_WAIT 7729
ESTABLISHED 471
FIN_WAIT1 3
FIN_WAIT2 52
SYN_SENT 1
TIME_WAIT 725
從結果可以看到有大量的連接處于CLOSE_WAIT狀態(tài)。
要解決這個(gè)問(wèn)題的可以修改系統的參數,系統默認超時(shí)時(shí)間的是7200秒,也就是2小時(shí)。
默認如下:
tcp_keepalive_time = 7200 seconds (2 hours)
tcp_keepalive_probes = 9
tcp_keepalive_intvl = 75 seconds
意思是如果某個(gè)TCP連接在idle 2個(gè)小時(shí)后,內核才發(fā)起probe.如果probe 9次(每次75秒)不成功,內核才徹底放棄,認為該連接已失效
修改后
sysctl -w net.ipv4.tcp_keepalive_time=30
sysctl -w net.ipv4.tcp_keepalive_probes=2
sysctl -w net.ipv4.tcp_keepalive_intvl=2
經(jīng)過(guò)這個(gè)修改后,服務(wù)器會(huì )在短時(shí)間里回收沒(méi)有關(guān)閉的tcp連接。
聯(lián)系客服