天天看點

close_wait連接配接 配錯

最近web伺服器在大流量情況下經常出現假死現象,背景log報 too many open files 的錯誤,加大linux系統的檔案打開數是可以解決部分問題,但是時間長了同樣出問題,通過查詢網絡連接配接發現是tcp連接配接不關閉造成的。如下:

  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狀态。 

要解決這個問題的可以修改系統的參數,系統預設逾時時間的是7200秒,也就是2小時。 

預設如下: 

tcp_keepalive_time = 7200 seconds (2 hours)

tcp_keepalive_probes = 9

tcp_keepalive_intvl = 75 seconds 

意思是如果某個TCP連接配接在idle 2個小時後,核心才發起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 

繼續閱讀