修改Linux核心參數,減少TCP串連中的TIME-WAIT sockets[原創]

來源:互聯網
上載者:User

[文章作者:張宴 本文版本:v1.0 最後修改:2007.07.24 轉載請註明出處:http://blog.s135.com]

   新增的一組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串連狀態》

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.