本文是效能問題分析與排查思路的內容之一,第三部分主要分為日誌第一階段的7篇系列文章、機器的4個週期、環境的2個問題,這是第三篇文章,講的是機器(硬體)網路方面的排查方法和最佳實踐。
主要內容如圖所示:
本文主要介紹網路原生工具、NetStat、網路時延、抖動和丟包率檢視、流量和網路頻寬限制查詢、鏈路分析、TCP連線檢測以及常見的網路相關異常。
Netstat 是乙個控制台命令,用於顯示與 IP、TCP、UDP 和 ICMP 協議相關的統計資訊,它是乙個功能強大的網路工具,可幫助使用者監視網路活動、查詢與網路相關的問題以及提供有關網路連線的詳細資訊。 netstat命令提供了多種選項,方便使用者根據自己的需求自定義輸出資訊,功能很多,本文就不一一贅述了,只介紹這樣乙個命令列工具,具體語法可以隨時搜尋。
問題 1:檢查埠是否處於監聽狀態? 命令:netstat -nalp |grep 埠號
問題 2:按連線狀態劃分,某個程序佔了多少個 TCP 連線?
命令為:netstat -anp | grep 12345 | awk '/^tcp/ ' | uniq -c
這對於解決連線過多、不釋放或半連線的問題非常有用!
如圖所示,該程序已經建立了3000多個網路連線,最後發現該程序存在連線未釋放的bug,這是直接證據!問題 3:根據 PID 分類計數,取前 10 位數字。
命令為:netstat -anp | awk '/^tcp/ ' | cut -d/ -f1 | sort | uniq -c | sort -nr | head
結果如圖所示
圖中第一列是連線數,第二列是程序的PID。以上用法,扔磚引玉。
ping
這是乙個眾所周知的命令,很普通,但足夠強大。
在圖中,您可以首先檢視網路是否連線。 其次,可以直接出現的延遲,比如上面的數字超過20毫秒,已經非常高了。 資料中心內部一般小於1毫秒,我在這裡ping乙個外部網路。 然後,通過最後一行的統計,可以看到網路抖動非常小,只有0321毫秒,所以雖然網路很慢,但非常穩定和均勻。 最後,可以測試更長時間的丟包率,即0%的丟包率,看看是否存在丟包。以上
ping
您可以執行該命令實時檢視丟包情況。 而ifconfig
該命令可以檢視歷史統計資訊,顯示每個網絡卡的資訊,重點關注每個資訊塊的最後兩行:
表示接收和傳送的網路報文數量,包括 drop 關鍵字,即丟包次數,這裡可以看作2010571,因此需要確認網路是否擁塞或其他異常。
一般情況下,網路流量應通過監控系統的頁面檢視,如果沒有現有的監控頁面可以檢視,請使用以下命令進行檢視。
用ethtool 網絡卡名稱
使用上述命令獲取 NIC 名稱!
上圖中的速度是網絡卡的理論上限,即千兆網絡卡,1000MB s。 這裡需要提醒的是,千兆不是我們常說的1GB,B在這裡有點,不是位元組!
在這裡,我們需要再次使用 Linux 工件 sar 命令。
SAR的功能太多了,關於檢視Internet速度的具體命令是:sar -n dev 1
第一列是時間戳。 其他主要字段解釋如下:
iface:這是網路介面的名稱。 在此示例中,有兩個介面。 rxpck/s:這是每秒接收的資料包數txpck/s:這是每秒傳輸的資料包數rxkb/s:這是每秒接收的千位元組數txkb/s:這是每秒傳輸的千位元組數,通過將傳送和接收的位元組數與上面的頻寬進行比較,可以檢視是否已經達到網路瓶頸!
iptraf-ng
還可以監控所有傳入和傳出流量,按協議區分流量,並設定過濾器。 它可用於實時監控網路流量、計算網路介面的使用情況、檢視網路連線等。 這是乙個稍微好一點的網際網絡速度檢查器! 如圖所示
TracePath 是一種網路診斷工具,用於跟蹤從源主機到目標主機的資料包路徑。 它通過傳送一系列 TTL(生存時間)值遞增的 ICMP 回顯請求資料包來探測路徑上的每個路由器,並記錄每個路由器的 IP 位址和響應時間。 示例輸出:
tracepath to www.example.com (93.184.216.34), 30 hops max, 60 byte packets
1 192.168.1.1 (1.234 ms)
2 10.0.0.1 (2.345 ms)
4 203.0.113.1 (123.456 ms)
5 * 6 93.184.216.34 (123.456 ms)
星號表示在該躍點未收到任何回覆。 每條線路還包括躍點的 IP 位址以及從源主機到躍點的往返時間(以毫秒為單位)。
如果您發現某個跳點的響應時間特別長或沒有收到響應,則可能表明路由器有故障或存在網路擁塞問題。 這對於網路故障排除和優化非常有幫助。
您可以繼續使用 sar 命令來觀察網路的重傳次數和強制關閉次數。 此外,可以適當擴充套件Linux網路半連線和全連線的佇列大小。
網路連線問題
錯誤資訊:network is unreachable
connection refused
no route to host
等。 現象:無法ping通其他主機、無法訪問Internet、無法訪問遠端服務等。 解決方案:檢查本地網路設定、路由器配置、防火牆設定等。 DNS 解析問題
錯誤資訊:name or service not known
症狀:無法通過網域名稱**訪問,只能通過 IP 位址訪問。 解決辦法:選中/etc/resolv.conf
檔案,或嘗試更改 DNS 伺服器。 服務埠偵聽問題
錯誤資訊:connection refused
症狀:嘗試連線到服務埠時,伺服器拒絕它。 解決辦法:檢查服務是否正在執行、埠是否開啟以及防火牆規則是否允許連線。 網路超時
錯誤資訊:request timed out
症狀:網路請求長時間無響應。 解決辦法:檢查網路延遲、頻寬限制、伺服器負載和其他因素。 路由配置問題
錯誤資訊:destination host unreachable
症狀:嘗試訪問網路時,顯示一條訊息,指出無法訪問目標主機。 解決辦法:使用route
用於檢視和修改路由表以確保預設路由設定正確的命令。 Linux 網路系統有許多故障排除工具,每個工具都有自己獨特的功能和應用場景。 通過結合這些工具並利用我們的經驗,我們能夠更有效地診斷和解決網路問題。 然而,僅僅依靠工具是不夠的,我們還需要不斷學習和積累網路知識,以便更好地理解和處理各種網路問題。 希望本文介紹的故障排除工具和經驗能夠為讀者在Linux網路系統的維護和故障排除方面提供一些幫助。