1. 程式人生 > >關於線上環境CLOSE_WAIT和TIME_WAIT過高

關於線上環境CLOSE_WAIT和TIME_WAIT過高

轉自:http://www.cnblogs.com/Bozh/p/3752476.html

運維的同學和Team裡面的一個同學分別遇到過Nginx在線上環境使用中會遇到TIME_WAIT過高或者CLOSE_WAIT過高的狀態

先從原因分析一下為什麼,問題就迎刃而解了。

首先是TIME_WAIT:

  理解一下TIME_WAIT狀態產生的原因,這個問題已經被很多很多的書說爛了,但是為什麼很多人還是不能解決,究其原因還是因為

大多數都是學術派,並沒有真正的遇到過這樣的問題,因為TIME_WAIT大量產生很多都發生在實際應用環境中。

TIME_WAIT產生的原因還是因為在通訊過程中服務端主動關閉造成的,在服務端傳送了最後一個FIN包後,系統會等待 Double時間

MSL(Max Segment Lifetime)用於等待接受客戶端傳送過來的FIN_ACK和FIN,這段時間服務端的對應的socket的fd是不能夠重新

利用的,這樣在大量的短連線服務中,會出現TIME_WAIT過多的現象。

解決方案:

  調整TIME_WAIT超時時間

1 vi /etc/sysctl.conf
1 2 3 4 5 6 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 = 20

其次是CLOSE_WAIT:

  CLOSE_WAIT產生的原因是客戶端主動關閉,收到FIN包,應用層卻沒有做出關閉操作引起的。

CLOSE_WAIT在Nginx上面的產生原因還是因為Nagle's演算法加Nginx本身EPOLL的ET觸發模式導致。

ET出發模式在資料就緒的時候會觸發一次回撥操作,Nagle's演算法會累積TCP包,如果最後的資料包和

FIN包被Nagle's演算法合併,會導致EPOLL的ET模式只出發一次,然而在應用層的SOCKET是讀取返回

0才代表連結關閉,而讀取這次合併的資料包時是不返回0的,然後SOCKET以後都不會觸發事件,所以

導致應用層沒有關閉SOCKET,從而產生大量的CLOSE_WAIT狀態連結。

  關閉TCP_NODELAY,在Nginx配置中加上

  tcp_nodelay        on;

相關推薦

[Nginx筆記]關於線上環境CLOSE_WAITTIME_WAIT

運維的同學和Team裡面的一個同學分別遇到過Nginx在線上環境使用中會遇到TIME_WAIT過高或者CLOSE_WAIT過高的狀態 先從原因分析一下為什麼,問題就迎刃而解了。 首先是TIME_WAIT:   理解一下TIME_WAIT狀態產生的原因,這個問題已經被很多很多的書說爛了,但是為什麼很多

關於線上環境CLOSE_WAITTIME_WAIT

轉自:http://www.cnblogs.com/Bozh/p/3752476.html 運維的同學和Team裡面的一個同學分別遇到過Nginx在線上環境使用中會遇到TIME_WAIT過高或者CLOSE_WAIT過高的狀態 先從原因分析一下為什麼,問題就迎刃而解了。 首先是TIME_WAIT:   理解

假設生產環境出現CPU佔用,請談談你的分析思路定位

0、top 1、檢視佔用cpu大的程序 jps -l 或者 ps -ef|grep java|grep -v grep&n

解決線上問題-定位CPU佔用

如果線上伺服器CPU佔用率過高,如何定位問題呢? 1.使用 top 命令檢視佔用CPU最高的pid 2.使用 top -H -p pid或 top -Hp pid命令檢視佔用cpu最大的執行緒id即 tid 3.使用命令 printf ‘%x/n’ tid

TCP的狀態,兼談Close_WaitTime_Wait的狀態 (keepalive機制)

一TCP的狀態: 1)、LISTEN:首先服務端需要開啟一個socket進行監聽,狀態為LISTEN. /* The socket is listening for incoming connections. 偵聽來自遠方TCP埠的連線請求 */ 2)、SYN_SENT:客

Filebeat占用內存CPU問題排查

ast beat 輸出 可能 follow tput 部署 cpu 一個 經反饋,新部署的服務器上filebeat占用的cpu過高,且內存只增不減。 而據我了解filebeat非常輕量級,正常情況下占用的資源幾乎都能忽略不計,所以懷疑是filebeat本身出了問題。 第

線上Java程式佔用 CPU ,請說一下排查方法?

> 我是風箏,公眾號「古時的風箏」,一個兼具深度與廣度的程式設計師鼓勵師,一個本打算寫詩卻寫起了程式碼的田園碼農! 文章會收錄在 [JavaNewBee](https://github.com/huzhicheng/JavaNewBee) 中,更有 Java 後端知識圖譜,從小白到大牛要走的路都在裡面。 這

再談應用環境下的 TIME_WAIT CLOSE_WAIT

ech 防範 生效 場景 closed 防止 減少 進入 top 轉自:http://blog.csdn.net/shootyou/article/details/6622226 昨天解決了一個HttpClient調用錯誤導致的服務器異常,具體過程如下: http://

線上Java程序導致服務器CPU占用率的問題排除過程

pid rem www fin mage 程序代碼 print 故障現象 read 博文轉至:http://www.jianshu.com/p/3667157d63bb,博文更好效果看原版,轉本博文的目的就算是個書簽吧,需要時候可以定位原文學習 1、故障現象 客服同

磁盤IO線程切換性能壓測案例分析

cnblogs 左右 系統 stp tex clas ++ class tap 案例現象: 壓力測試的時候,發現A請求壓力80tps後,cpu占用就非常高了(24核的機器,每個cpu占用率全面飆到80%以上),且設置的檢查點沒有任何報錯。 1、top命令如下: 2、

記一次線上Java程序導致服務器CPU占用率的問題排除過程

tasks all lob jstat rip 進行 runable tails 分享圖片 https://blog.csdn.net/u013991521/article/details/52781423 1、故障現象 客服同事反饋平臺系統運行緩慢,網頁卡頓嚴重,多次重啟

【ORACLE效能】ORACLE伺服器的CPU負載均衡

ORACLE伺服器的CPU和負載均衡過高 場景: 資料庫版本:11.2.0.4 RAC;系統版本:Oracle Linux 6.4 巡檢發現DDDRAC庫CPU/負載均衡過高,load(15m)值達到了40以上,CPU值達到90%以上。 解決: 發現CPU和過載過高後,檢視磁碟I

TIME_WAIT、NON_ESTABLISHED 連線數,導致tomcat服務直接宕機

TCP常見配置參考地址: http://shift-alt-ctrl.iteye.com/blog/1966744;https://www.cnblogs.com/fczjuever/archive/2013/04/05/3000697.html 以上圖最大連線數接近了2000,這個對於單機環境來說基本已

深入理解TCP(2)TCP的斷開一定是四次揮手嗎?FIN_WAIT_2CLOSE_WAITTIME_WAIT以及LAST_ACK的細節

答案是否定的 1我們回顧下使用wireshark的抓包 1.1. 伺服器未開 客戶端嘗試連線 1.2 建立連線然後關閉,斷開的時候時候有時候三次握手有時候四次握手 1.3. 建立連線,互動一次然後斷開 根據wireshark的包,四會握手的第二步

IIS解決CPU記憶體佔用率的問題

發現程序中的w3wp佔用率過高。   經過查詢,發現如下:   w3wp.exe是在IIS(因特網資訊伺服器)與應用程式池相關聯的一個程序,如果你有多個應用程式池,就會有對應的多個w3wp.exe的程序例項執行。這個程序用來分配大量的系統資源。這個程序對於系統的穩定和安

凡是能導到線上的都已經嘗試了,現在轉化使用者成本非常,到了強者恆強的時代

網際網路裁員,是綜合因素導致,大環境下的必然產物。一般情況下各行業週期為20年左右,這個週期相對準確。我們來詳細解讀下,網際網路行業從1998年起步,直至新浪、網易、搜狐、騰訊的鼎立,標誌著網際網路進入高速發展時期,隨後阿里、百度、騰訊崛起,成為網際網路行業的標杆企業,中國的人口紅利,形成了巨大的流量池,流量

線上Java程式導致伺服器CPU佔用率的問題排除過程

1、故障現象 客服同事反饋平臺系統執行緩慢,網頁卡頓嚴重,多次重啟系統後問題依然存在,使用top命令檢視伺服器情況,發現CPU佔用率過高。 2、CPU佔用過高問題定位 2.1、定位問題程序 使用top命令檢視資源佔用情況,發現pid為14063的程序佔用了大量的CPU

cpu load問題分析解決

基本思維是有東西佔用的CPU_QUEUE,檢視一下程序的狀態。 top -H shift+o =選擇w (按照狀態排序) **1. 首先排查哪些程序cpu佔用率高。 通過命令 ps ux 2. 檢視對應Java程序的每個執行緒的CPU佔用率。通

Kubernetes高階實踐:Master可用方案設計的那些坑

今天我將為大家介紹如何構建Kubernetes Master High Availability環境。此次分享內容是我在工作中經驗總結,如果有不正確的或者需要改進的地方,歡迎各位大神指正。 Kubernetes作為容器編排管理系統,通過Scheduler、Replicat

close_wait狀態time_wait狀態

根據TCP協議,主動發起關閉的一方,會進入TIME_WAIT狀態,持續2*MSL(Max Segment Lifetime),預設為240秒,在這個post中簡潔的介紹了為什麼需要這個狀態。 值得一說的是,對於基於TCP的HTTP協議,關閉TCP連線的是Server端,這樣,Server端會進入TIME