1. 程式人生 > >減少Linux下Squid伺服器的TIME_WAIT套接字數量

減少Linux下Squid伺服器的TIME_WAIT套接字數量

原貼:http://blog.s135.com/post/338/

Linux下高併發的Squid伺服器,TCP TIME_WAIT套接字數量經常達到兩、三萬,伺服器很容易被拖死。通過修改Linux核心引數,可以減少Squid伺服器的TIME_WAIT套接字數量。
  

vi /etc/sysctl.conf


  增加以下幾行:

引用 net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 1024    65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000


  說明:
  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 表示如果套接字由本端要求關閉,這個引數決定了它保持在FIN-WAIT-2狀態的時間。
  net.ipv4.tcp_keepalive_time = 1200 表示當keepalive起用的時候,TCP傳送keepalive訊息的頻度。預設是2小時,改為20分鐘。
  net.ipv4.ip_local_port_range = 1024    65000 表示用於向外連線的埠範圍。預設情況下很小:32768到61000,改為1024到65000。
  net.ipv4.tcp_max_syn_backlog = 8192 表示SYN佇列的長度,預設為1024,加大佇列長度為8192,可以容納更多等待連線的網路連線數。
  net.ipv4.tcp_max_tw_buckets = 5000 表示系統同時保持TIME_WAIT套接字的最大數量,如果超過這個數字,TIME_WAIT套接字將立刻被清除並列印警告資訊。預設為180000,改為5000。對於Apache、Nginx等伺服器,上幾行的引數可以很好地減少TIME_WAIT套接字數量,但是對於Squid,效果卻不大。此項引數可以控制TIME_WAIT套接字的最大數量,避免Squid伺服器被大量的TIME_WAIT套接字拖死。

  執行以下命令使配置生效:

/sbin/sysctl -p