TIME_WAIT太多解決思路和方法


問題描述
環境是SLB+2台ECS實例,在ECS實例上跑的是的LNMP服務,在某一天下午三點中app包加載數據很慢,平時可能一兩秒就能加載完成js,css等樣式

解決方法
1、找到加載慢的域名和URL
訪問后端數據庫,看獲取數據情況,訪問數據正常。


2、查看操作系統CPU、內存、負載、網絡情況
查看CPU命令:top
查看內存命令:free -m
服務器負載:uptime
網絡:ping 域名


檢測完后都沒有問題


3、查看nginx訪問日志
通過 tail -f 日志文件 查看,訪問url地址,狀態碼都是200,證明正常


4、查看數據庫
通過 show full processlist 查看數據庫的整體狀況,正在執行的SQL等情況。


備注:
這個我沒有執行,因為我前面檢測都沒有問題,也能獲取到數據,返回狀態碼是200,說明數據庫是沒有問題的。
如果有很多的SQL,有explain檢索下,看看是否需要優化


5、查看TCP狀態
命令:netstat -an | awk ‘/^tcp/{++S[$NF]}END{for(i in S) print i,S[i]}’
發現TIME_WAIT的數量有近五千個,后來就先查看內核中tcp相關的參數
> sysctl -a | grep ‘tw’
net.ipv4.tcp_max_tw_buckets = 5000 #TIME_WAIT的數量
net.ipv4.tcp_tw_recycle = 0 #關閉TCP連接中TIME_WAIT sockets的快速回收,開啟快速回收是不安全的,尤其是在nat模式下
net.ipv4.tcp_tw_reuse = 0 #不開啟將TIME_WAIT sockets重新用於新的TCP連接


還有兩個參數是:
①表示開啟SYN Cookies。當出現SYN等待隊列溢出時,啟用cookies來處理,可防范少量SYN攻擊,默認為0,表示關閉
net.ipv4.tcp_syncookies = 1


②TIMEOUT時間
net.ipv4.tcp_fin_timeout = 30

 


首先修改內核參數:
> cat >> /etc/sysctl.conf << END
net.ipv4.tcp_max_tw_buckets = 32768
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_fin_timeout = 30
END
> sysctl -p


其次,清理內存里面的數據
> sync
> echo 3 > /proc/sys/vm/drop_caches


執行完上述操作,TIME_WAIT 的數量並沒有降下來


最后設置為長鏈接,才解決。


6、nginx和apache長鏈接設置方式
(1)當nginx為web服務器的時候,長鏈接設置方式,只需要將9000端口修改為sock連接即可。
(2)當nginx作為代理服務器的時候,需要在
upstream backend {
server xxxxxx;
keepalive 165;
}


location /http/ {
##設置開啟長連接
proxy_http_version 1.1 ;
proxy_set_header Connection “” ;


proxy_pass http://backend ;
}


(3)apache開啟長鏈接參數
KeepAlive On
KeepAliveTimeout 60

產生大量TIME_WAIT的原因
一般情況服務器端不會出現TIME_WAIT狀態,因為大多數情況都是客戶端主動發起連接並主動關閉連接。但是某些服務如pop/smtp、ftp卻是服務端收到客戶端的QUIT命令后主動關閉連接,這就造成這類服務器上容易出現大量的TIME_WAIT狀態的連接,而且並發量越大處於此種狀態的連接越多。另外,對於被動關閉連接的服務在主動關閉客戶端非法請求或清理長時間不活動的連接時(這種情況很可能是客戶端程序忘記關閉連接)也會出現TIME_WAIT的狀態。

有 TIME_WAIT 不一定不好,也不是因為它多,而是占用了資源致使不能創建更多的socket。
TIME_WAIT 對於web服務器來說,占用了一個socket 60秒,socket的數量是有限的,最多65535。

解決 TIME_WAIT 問題思路
①解決發起端的IP地址,添加更多的IP(time_wait多的服務器)
②改用長鏈接方式
③修改程序代碼,這個是我在面試的時候面試官說的,我沒有實踐過
————————————————
版權聲明:本文為CSDN博主「幸福丶如此」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/m0_37886429/article/details/80166340


免責聲明!

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



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