服務器性能調優(netstat監控大量ESTABLISHED連接與Time_Wait連接問題)


netstat監控大量ESTABLISHED連接與Time_Wait連接問題

 

問題描述:

在不考慮系統負載、CPU、內存等情況下,netstat監控大量ESTABLISHED連接與Time_Wait連接。

# netstat -n | awk '/^tcp/ {++y[$NF]} END {for(w in y) print w, y[w]}'
CLOSE_WAIT         348
ESTABLISHED        1240
TIME_WAIT          5621

監控Apache與tomcat之間的鏈接端口

#netstat -n | grep 8009 | wc -l

7198

問題1:怎么解決大量Time_Wait

通過調整內核參數:

復制代碼
vim /etc/sysctl.conf
#編輯文件,加入以下內容:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
#然后執行 /sbin/sysctl -p 讓參數生效。
復制代碼

配置說明:

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修改系統默認的 TIMEOUT 時間。

如果以上配置調優后性能還不理想,可繼續修改一下配置:

復制代碼
vi /etc/sysctl.conf
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套接字拖死。
復制代碼

調優完畢,再壓一下看看效果吧。

# netstat -n | awk '/^tcp/ {++y[$NF]} END {for(w in y) print w, y[w]}'

ESTABLISHED        968

問題1:怎么解決請求結束后依然存在大量ESTABLISHED沒有被釋放

初步推斷是tomcat服務器回收session時出了問題,這個一般都跟服務器的Timeout設置有聯系。

查看tomcat的配置文件 server.xml

 

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="UTF-8" />
*****

 

檢查配置得出20000毫秒的時候acceptCount=”100” ,明顯不合理,最大連接數也太小了吧。

所以進一步優化:

connectionTimeout="20000" 改為 connectionTimeout="100"

acceptCount="100"改為acceptCount="5000"

優化完畢,繼續壓測...

系統響應能力節節攀升,之前LoadRunner報錯問題直到壓倒***並發也再也沒有出現。

Action.c(380): 錯誤 -26608: 對於“http://www.cnlogs.com/javame”,HTTP 狀態代碼=504 (Gateway Time-out)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM