如何修改Linux核心參數,減少TCP串連中的TIME-WAIT?,linuxtime-wait
一、基本設定
如果python中socket 綁定的地址正在使用,往往會出現錯誤,
在linux下:
則會顯示“ socket.error: [Errno 98] Address already in use”
在windows下:
則會顯示 “socket.error: [Errno 10048] 通常每個通訊端地址(協議/網路地址/連接埠)只允許使用一次”
這是因為socket預設不支援地址複用,如果要複用需要顯示設定,即在綁定前調用setsockop函數t讓通訊端允許地址重用:socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
例如:
[python] view plain copy
self.recSocket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)self.recSocket.settimeout(CHECK_TIMEOUT)
self.recSocket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)self.recSocket.bind(('',UDP_PORT))
二、進一步設定(並發串連量大需要設定)
上述是在程式中設定重用,此外如果並發串連請求過多的時候,即短時間內串連請求很多,系統自動釋放已佔用連接埠的時間還沒有到,又有串連請求(可用的連接埠已經被用完),所以還會出現 Address already in use錯誤提示),就會產生大量的TIME_WAIT狀態的串連。這種情況下就有必要調整下Linux的TCP/IP核心參數,讓系統更快的釋放TIME_WAIT串連。
用vi開啟設定檔:
[python] view plain copy
#vi/etc/sysctl.conf
然後,在這個檔案中,加入下面的幾行內容(詳細內容及解釋參見 文章 修改Linux核心參數,減少TCP串連中的TIME-WAIT、linux TCP串連配置):
[python] view plain copy
net.ipv4.tcp_syncookies=1#這一行設定檔裡如果有就不用添加了net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1net.ipv4.tcp_fin_timeout=5
最後輸入下面的命令,讓核心參數生效:
[python] view plain copy
#/sbin/sysctl-p