關於Linux下如何查看Nginx的並發連線數和連線狀態的詳細介紹
1、查看Web伺服器(Nginx Apache)的同時請求數及其TCP連線狀態:
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
或:
netstat -n | awk '/ ^tcp/ {++state[$NF]} END {for(key in state) print key,"t",state[key]}'回報結果大致如下:
LAST_ACK 5 (正在等待处理的请求数) SYN_RECV 30 ESTABLISHED 1597 (正常数据传输状态) FIN_WAIT1 51 FIN_WAIT2 504 TIME_WAIT 1057 (处理完毕,等待超时结束的请求数)
其他參數說明:
CLOSED:無連接是活動的或正在進行中
LISTEN:伺服器在等待進入呼叫
SYN_RECV:一個連線請求已經到達,等待確認
SYN_SENT:應用程式已經開始,開啟一個連線
ESTABLISHED:正常資料傳輸狀態
FIN_WAIT1:應用程式說它已經完成
FIN_WAIT2:另一邊已同意釋放
ITMED_WAIT:等待所有分組死掉
##CLOSING:兩邊同時嘗試關閉 TIME_WAIT:另一邊已初始化一個釋放 LAST_ACK:等待所有分組死掉 #常用的三個狀態是:ESTABLISHED 表示正在通信,TIME_WAIT 表示主動關閉,CLOSE_WAIT 表示被動關閉。 TCP協定規定,對於已經建立的連接,網路雙方要進行四次握手才能成功斷開連接,如果缺少了其中某個步驟,將會使連接處於假死狀態,連接本身佔用的資源不會被釋放。網路伺服器程式要同時管理大量連接,所以很有必要保證無用連接完全斷開,否則大量僵死的連接會浪費許多伺服器資源。在眾多TCP狀態中,最值得注意的狀態有兩個:CLOSE_WAIT和TIME_WAIT。 TIME_WAIT TIME_WAIT 是主動關閉連結時形成的,等待2MSL時間,約4分鐘。主要是防止最後一個ACK遺失。 由於TIME_WAIT 的時間會非常長,因此server端應盡量減少主動關閉連線CLOSE_WAITCLOSE_WAIT是被動關閉連線是形成的。根據TCP狀態機,伺服器端收到客戶端發送的FIN,則依照TCP實作發送ACK,因此進入CLOSE_WAIT狀態。但如果伺服器端不執行close(),就無法由CLOSE_WAIT遷移到LAST_ACK,則系統中會存在許多CLOSE_WAIT狀態的連線。此時,可能是系統忙於處理讀取、寫入操作,而未將已收到FIN的連接,進行close。此時,recv/read已收到FIN的連接socket,會回傳0。 為什麼需要 TIME_WAIT 狀態? 假設最終的ACK遺失,server將重發FIN,client必須維護TCP狀態資訊以便可以重發最終的ACK,否則會傳送RST,結果server認為發生錯誤。 TCP實作必須可靠地終止連線的兩個方向(全雙工關閉),client必須進入 TIME_WAIT 狀態,因為client可能面 臨重發最終ACK的情形。 為什麼 TIME_WAIT 狀態需要維持 2MSL 這麼長的時間? 如果 TIME_WAIT 狀態保持時間不足夠長(例如小於2MSL),第一個連線就正常終止了。第二個擁有相同相關五元組的連接出現,而第一個連接的重複訊息到達,幹擾了第二個連接。 TCP實作必須防止某個連線的重複封包在連線終止後出現,所以讓TIME_WAIT狀態保持時間夠長(2MSL),連線對應方向上的TCP封包要麼完全回應完畢,要麼被 丟棄。建立第二個連結的時候,不會混淆。 TIME_WAIT 和CLOSE_WAIT狀態socket過多如果伺服器出了異常,百分之八九十都是以下兩種情況:1.伺服器保持了大量TIME_WAIT狀態2.伺服器保持了大量CLOSE_WAIT狀態,簡單來說CLOSE_WAIT數目過大是由於被動關閉連接處理不當導致的。
因為linux分配給一個使用者的檔案句柄是有限的,而TIME_WAIT和CLOSE_WAIT兩種狀態如果一直被保持,那麼意味著對應數目的通道就一直被佔著,而且是「佔著茅坑不對勁”,一旦達到句柄數上限,新的請求就無法被處理了,接著就是大量Too Many OpenFiles異常,Tomcat崩潰。
以上是關於Linux下如何查看Nginx的並發連線數和連線狀態的詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Linux系統的五個基本組件是:1.內核,2.系統庫,3.系統實用程序,4.圖形用戶界面,5.應用程序。內核管理硬件資源,系統庫提供預編譯函數,系統實用程序用於系統管理,GUI提供可視化交互,應用程序利用這些組件實現功能。

雖然 Notepad 無法直接運行 Java 代碼,但可以通過借助其他工具實現:使用命令行編譯器 (javac) 編譯代碼,生成字節碼文件 (filename.class)。使用 Java 解釋器 (java) 解釋字節碼,執行代碼並輸出結果。

要查看 Git 倉庫地址,請執行以下步驟:1. 打開命令行並導航到倉庫目錄;2. 運行 "git remote -v" 命令;3. 查看輸出中的倉庫名稱及其相應的地址。

Linux的主要用途包括:1.服務器操作系統,2.嵌入式系統,3.桌面操作系統,4.開發和測試環境。 Linux在這些領域表現出色,提供了穩定性、安全性和高效的開發工具。

Visual Studio Code (VSCode) 是一款跨平台、開源且免費的代碼編輯器,由微軟開發。它以輕量、可擴展性和對眾多編程語言的支持而著稱。要安裝 VSCode,請訪問官方網站下載並運行安裝程序。使用 VSCode 時,可以創建新項目、編輯代碼、調試代碼、導航項目、擴展 VSCode 和管理設置。 VSCode 適用於 Windows、macOS 和 Linux,支持多種編程語言,並通過 Marketplace 提供各種擴展。它的優勢包括輕量、可擴展性、廣泛的語言支持、豐富的功能和版

要安裝 Laravel,需依序進行以下步驟:安裝 Composer(適用於 macOS/Linux 和 Windows)安裝 Laravel 安裝器創建新項目啟動服務訪問應用程序(網址:http://127.0.0.1:8000)設置數據庫連接(如果需要)

在 Sublime 中運行代碼的方法有六種:通過熱鍵、菜單、構建系統、命令行、設置默認構建系統和自定義構建命令,並可通過右鍵單擊項目/文件運行單個文件/項目,構建系統可用性取決於 Sublime Text 的安裝情況。
