1. 程式人生 > >Resin伺服器出現大量的ESTABLISHED和TIME_WAIT連線造成響應緩慢

Resin伺服器出現大量的ESTABLISHED和TIME_WAIT連線造成響應緩慢

Resin服務的埠為8080,執行 lsof -i:8080 命令出現大量的ESTABLISHED連線:

然後執行netstat -n | awk ‘/^tcp/ {++y[$NF]} END {for(w in y) print w, y[w]}’ 命令發現存在大量狀態為TIME_WAIT的連線:

簡單來說,
ESTABLISHED表示正在進行網路連線的數量,
TIME_WAIT表示表示等待系統主動關閉網路連線的數量,
CLOSE_WAIT表示被動等待程式關閉的網路連線數量,因此TIME_WAIT跟伺服器的配置有關,而CLOSE_WAIT跟程式進行網路連線有關了,通常是程式沒有主動關閉網路連線所致。

上圖中顯然TIME_WAIT的數量太多了,需要對伺服器進行配置。對 /etc/sysctl.conf 檔案做如下設定(包含每個配置項的說明):

//*對於一個新建連線,核心要傳送多少個 SYN 連線請求才決定放棄,不應該大於255,預設值是5,對應於180秒左右時間   
net.ipv4.tcp_syn_retries=2 
#net.ipv4.tcp_synack_retries=2 
//表示當keepalive起用的時候,TCP傳送keepalive訊息的頻度。預設是2小時,改為300秒 
net.ipv4.tcp_keepalive_time=1200 
net.ipv4.tcp_orphan_retries=3
//表示如果套接字由本端要求關閉,這個引數決定了它保持在FIN-WAIT-2狀態的時間 net.ipv4.tcp_fin_timeout=30 //表示SYN佇列的長度,預設為1024,加大佇列長度為8192,可以容納更多等待連線的網路連線數。 net.ipv4.tcp_max_syn_backlog = 4096 //表示開啟SYN Cookies。當出現SYN等待佇列溢位時,啟用cookies來處理,可防範少量SYN攻擊,預設為0,表示關閉 net.ipv4.tcp_syncookies = 1 //表示開啟重用。允許將TIME-WAIT sockets重新用於新的TCP連線,預設為0,表示關閉
net.ipv4.tcp_tw_reuse = 1 //表示開啟TCP連線中TIME-WAIT sockets的快速回收,預設為0,表示關閉 net.ipv4.tcp_tw_recycle = 1 //減少超時前的探測次數 net.ipv4.tcp_keepalive_probes=5 //優化網路裝置接收佇列 net.core.netdev_max_backlog=3000

修改儲存之後執行 /sbin/sysctl -p讓引數生效即可。這裡需要說明幾點:
(1) net.ipv4.tcp_tw_reuse和net.ipv4.tcp_tw_recycle的開啟都是為了回收處於TIME_WAIT狀態的資源,net.ipv4.tcp_fin_timeout這個時間可以減少在異常情況下伺服器從FIN-WAIT-2轉到TIME_WAIT的時間,net.ipv4.tcp_keepalive_*一系列引數,是用來設定伺服器檢測連線存活的相關配置。

另外如果出現大量的CLOSE_WAIT說明程式在進行網路連線的時候沒有主動關閉連線,比如使用HttpClient呼叫網路連線的時候,當出現錯誤的時候沒有呼叫abort()方法,或者網路連線結束之後沒有呼叫close方法等等,具體在原始碼中進行排查即可。

相關推薦

Resin伺服器出現大量ESTABLISHEDTIME_WAIT連線造成響應緩慢

Resin服務的埠為8080,執行 lsof -i:8080 命令出現大量的ESTABLISHED連線: 然後執行netstat -n | awk ‘/^tcp/ {++y[$NF]} END {for(w in y) print w, y[w]}’ 命令發現

伺服器出現大量的資料庫連線WAIT_TIME

總結:忘記配置連線池 描述:系統上線後。部署一段時間後,發現特別卡。 1、輸入netstat -ant 發現大量的  0 127.0.0.1:3306          127.0.0.1:51084         WAIT_TIME 我用的是Mysql ,3306埠可以

Tcp連接出現大量ESTABLISHED連接解決方法

tcp establishedTCP狀態轉移要點TCP協議規定,對於已經建立的連接,網絡雙方要進行四次握手才能成功斷開連接,如果缺少了其中某個步驟,將會使連接處於假死狀態,連接本身占用的資源不 會被釋放。網絡服務器程序要同時管理大量連接,所以很有必要保證無用連接完全斷開,否則大量僵死的連接會浪費許多服務器資源

nginx 伺服器出現大量CLOSE_WAIT 排查結果

1、查閱資料,查下close_wait 狀態的直接原因,期間可以再次熟悉下 tcp 三次握手,四次揮手協議的基礎知識。2、通過查詢資料,最終可以確定的是nginx本身問題,根據網上常推薦的兩種方式分別調整系統和nginx本身的引數均無法解決此問題。1)系統層面(快速釋放空閒的tcp連線) net.ip

伺服器出現大量close_wait,我們來說說到底是怎麼回事?(以tomcat為例)

一、問題描述 最近一直忙得很,好久沒寫部落格。前兩天,微信收到個好友申請,說是想問問close_wait的事情。   找他問了些詳細資訊,大概瞭解到,他們後端服務是tomcat 7, jdk 7,centos,傳統的spring + hibernate + spring mvc 結構。

伺服器出現大量SYN_RECV狀態,導致客戶端無法連線

程式背景: 客戶端與服務端通過短連線通訊,客戶端傳送訊息頻率為 600條/秒 BUG現象: 客戶端向服務端傳送一段時間的訊息後,客戶端無法與服務段建立連線, 檢視服務端埠狀態 netstat -an|grep 37058 發現存在大量SYN_RECV以及CLOSE_WAI

解決伺服器存在大量TIME_WAITCLOSE_WAIT狀態

裡頭的分析過程有提到,通過檢視伺服器網路狀態檢測到伺服器有大量的CLOSE_WAIT的狀態。 在伺服器的日常維護過程中,會經常用到下面的命令: netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) prin

伺服器出現大量的SYN_RECV狀態的TCP連線的問題分析

首先我們需要弄清楚SYN_RCVD狀態是怎樣產生的,通過TCP狀態轉換圖(如下圖)我們可以清楚的看到,SYN_RCVD是TCP三次握手的中間狀態,是服務埠(監聽埠,如應用伺服器的80埠)收到SYN包併發送[SYN,ACK]包後所處的狀態。這時如果再收到ACK的包,就

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

r報錯 nginx vim 個數字 syn攻擊 並發 tco dir XML netstat監控大量ESTABLISHED連接與Time_Wait連接問題 問題描述: 在不考慮系統負載、CPU、內存等情況下,netstat監控大量ESTABLISHED連接與Tim

/var/spool/postfix/maildrop 出現大量文件原因解決辦法

完全 通過 解決問題 輸出內容 .sh uil 問題 立即生效 pos 今天發現服務器硬盤報警,出現空間不足的情況,後經查看發現是 /var/spool/postfix/maildrop 有大量文件,但服務器本身沒有啟動 postfix服務。 繼續上網查資料,發現是cron

伺服器購買遠端連線

1. 申請阿里雲伺服器 *開啟阿里雲ECS購買頁面,並用淘寶賬號登陸,可以按需購買。基礎配置的話包月大約60元/月    在部署階段也可以選擇按使用流量付費,只需要32元/月,後續部署成功後進行配置升級  作業系統選擇Ubuntu的最新版本  填寫登

PHP-Websockets 上傳檔案2 優化支援php socket客戶端websocket連線websocket伺服器 以守護程序方式執行編碼

WebsocketServer: users.php <?php class WebSocketUser { public $socket; public $id; public $headers = array(); public $handsh

Nginx伺服器出現502錯誤的原因解決辦法總結

  一些執行在Nginx上的網站有時候會出現“502 Bad Gateway”錯誤,有些時候甚至頻繁的出現。有些站長是在剛剛轉移到Nginx之後就出現了這個問題,所以經常會懷疑這是不是Nginx的問題,但事實上這是個誤區。 以下是從張宴和Ayou的部落格蒐集整理的一些Ngin

win7 遠端連線伺服器出現身份驗證錯誤,又找不到加密Oracle修正

今天想用遠端桌面連線登入伺服器,結果,彈出一個錯誤的提示框:發生身份驗證錯誤,要求的函式不受支援。    然後在網上找了相關的教程,基本上所有的方法都是如下所示:    策略路徑:"計算機配置"->"管理模板"->"系統"->"憑據分

在與 SQL Server 建立連線出現與網路相關的或特定於例項的錯誤。未找到或無法訪問伺服器 在與 SQL Server 建立連線出現與網路相關的或特定於例項的錯誤。未找到或無法訪問伺服器

在與 SQL Server 建立連線時出現與網路相關的或特定於例項的錯誤。未找到或無法訪問伺服器。   1.開啟sqlserver 管理配置器 2.點選sqlExpress的協議,我們要啟動所有狀態。 3.選擇TCP/IP,點選右鍵,選擇屬性,我們

07.應對系統中出現大量不可中斷程序殭屍程序

上一篇,用一個 Nginx+PHP 的案例,給你講了伺服器 CPU 使用率高的分析和應對方法。這裡一定要記得,當碰到無法解釋的 CPU 使用率問題時,先要檢查一下是不是短時應用在搗 鬼。 短時應用的執行時間比較短,很難在 top 或者 ps 這類展示系統概要和程序快照的工具中發現, 你需要使用記錄事件的工具來

07.應對系統中出現大量不可中斷進程僵屍進程

基於 增加 繼續 適用於 觀察 ron work mas 空閑 上一篇,用一個 Nginx+PHP 的案例,給你講了服務器 CPU 使用率高的分析和應對方法。這裏一定要記得,當碰到無法解釋的 CPU 使用率問題時,先要檢查一下是不是短時應用在搗 鬼。 短時應用的運行時間比較

大量TIME_WAIT連線的解決辦法

根據TCP協議的連線斷開規定,發起socket主動關閉的一方,socket將進入TIME_WAIT狀態,TIME_WAIT狀態將持續2個MSL(Max Segment Lifetime),在Windows下預設為4分鐘,即240秒,TIME_WAIT狀態下的so

解決系統中大量TIME_WAIT連線

[[email protected] logs]# netstat -an | grep TIME_WAIT tcp 0 0 a.a.a.a:54709 b.b.b.b:3306 TIME_WAIT

Linux命令列&連線Linux伺服器&資料庫優化&MyISAMInnerDB&redis&memcache

Linux 長時間執行穩定的作業系統,當成伺服器(web、db、app)。有C編譯環境,有一些軟體(Redis、nginx)沒有軟體包,需要在Linux編譯獲得軟體包。 常用命令 pwd:獲取當前路徑 cd:跳轉到目錄 su-u:切換到管理員 ls或ll:列舉目