服務器出現大量TIME

一 、故障原因:

服務器突然出現大量time_wait(因為大量連接資源被佔用後不釋放的話,會導致網站正常訪問不能響應)。如何應對?

我這邊先檢查了監控和服務器當前的狀態(time_wait連接確實異常):

1、監控


服務器出現大量TIME_WAIT解決方案


2、登錄服務器檢查


服務器出現大量TIME_WAIT解決方案

二、排查思路:

1、猜測是否因為程序打開大量文件句柄,沒有關閉導致。(問了研發同事,排查過後沒有這種情況)

2、調大當前文件句柄

3、調優sysctl.conf文件

4、檢查nginx連接情況

三、解決方法:

1、操作系統文件句柄之前已經調整過。

echo "ulimit -SHn 66536" >>/etc/rc.local

2、調優/etc/sysctl.conf

<code>net.ipv4.tcp_syncookies = 1  

net.ipv4.tcp_tw_reuse=1 #讓TIME_WAIT狀態可以重用,這樣即使TIME_WAIT佔滿了所有端口,也不會拒絕新的請求造成障礙 默認是0

net.ipv4.tcp_tw_recycle=1 #讓TIME_WAIT儘快回收 默認0

net.ipv4.tcp_fin_timeout=30

sysctl -p/<code>

3、調整nginx 配置文件(最優方法)

<code>upstream http_backend {
server 127.0.0.1:8080;
keepalive 16;

}
server {
...
location /http/ {
proxy_pass http://http_backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
...
}
}/<code>

總結:

由於nginx 在反向代理http協議的時候,默認採用的http1.0.

HTTP1.0的特點:不支持長連接(http keep-alive).CLOSE通知後端服務器主動關閉連接。會導致任何一個客戶端的請求都在後端服務器上產生了一個TIME-WAIT狀態連接

HTTP1.1的特點:支持長連接。

關鍵配置參數:keep-alive 16; proxy_http_vesion 1.1; proxy_set_header Connection "";


分享到:


相關文章: