摘--修改Linux核心引數,減少TCP連線中的TIME-WAIT sockets

realji發表於2009-03-06
 新增的一組Apache伺服器上線以來,我用netstat -an命令發現伺服器中有大量狀態為TIME-WAIT的TCP連線,於是用/sbin/sysctl -a檢視了一下Linux的各項核心引數,並翻閱有關資料,決定修改其中的兩項引數,以達到減少TCP連線中TIME-WAIT sockets的目的。

  vi /etc/sysctl.conf
  編輯/etc/sysctl.conf檔案,增加三行:
引用
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1


  說明:
  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,表示關閉。

  再執行以下命令,讓修改結果立即生效:
  /sbin/sysctl -p

  用以下語句看了一下伺服器的TCP狀態:
  netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
  返回結果如下:
  ESTABLISHED 1423
  FIN_WAIT1 1
  FIN_WAIT2 262
  SYN_SENT 1
  TIME_WAIT 962

  效果:處於TIME_WAIT狀態的sockets從原來的10000多減少到1000左右。處於SYN_RECV等待處理狀態的sockets為0,原來的為50~300。

  附:TCP狀態變遷圖,見我的另一篇文章《檢視Apache併發請求數及其TCP連線狀態

------------------------------------------------

配置Nginx+tomcat的時候發現,會有很多time wait的連線。用上法處理後,基本就解決了。。另外還有其他幾個配置

net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 5000 65000

如 fin超時時間,tcp的保活時間,以及本地埠範圍

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7425608/viewspace-1018212/,如需轉載,請註明出處,否則將追究法律責任。

相關文章