linux網路開發者定位問題常用工具和命令總結

itwolf發表於2023-04-15

本文章來自我的微信個人技術公眾號---網路技術修煉,公眾號中總結普及網路基礎知識,包括基礎原理、網路方案、開發經驗和問題定位案例等,歡迎關注。

Linux網路開發者面臨的問題往往比較複雜,因此需要使用一些工具和命令來進行定位和解決。在本篇部落格中,我將總結一些常用的Linux網路開發者工具和命令,包括網路包觀測、各層網路狀況快速診斷、網路關鍵統計計數收集、效能診斷、問題復現等方面的命令總結。

 
分類 命令、工具 作用 備註
包觀測

tcpdump

用於抓取網路資料包。透過 tcpdump 命令可以捕獲網路資料包,並進行分析和診斷。

 

wireshark&&tshark

分析網路資料包。

wireshark視覺化分析,tshark命令列分析。

tcpflow

用於抓取 TCP 流量並儲存到檔案。透過 tcpflow 命令可以捕獲 TCP 流量,並將每個 TCP 連線的資料儲存到不同的檔案中。

比如可以快速將每個連線的包分發到不同檔案儲存。

ngrep

用於過濾和顯示網路資料包。透過 ngrep 命令可以過濾和顯示滿足特定條件的資料包。

比如快速過濾http GET和POST請求。

快速驗證各層網路情況

ping

用於測試主機之間是否能夠互相通訊。透過向目標主機傳送 ICMP 報文,可以確定網路連線是否正常。

檢查ip層是否ok。

telnet

用於遠端登入和測試網路服務。透過 telnet 命令可以遠端登入主機、測試網路服務是否可用,並進行互動式操作。

檢查tcp握手是否ok。

curl

 

用於從命令列傳送 HTTP 請求。透過 curl 命令可以傳送 GET、POST 等 HTTP 請求,並檢視伺服器返回的響應。

檢查http是否ok。

openssl

OpenSSL 是一個常用的加密工具庫,可以用來實現 SSL/TLS 通訊、數字證書籤發和管理、密碼學演算法等功能。

檢查ssl握手情況,證書內容等。

網路路徑狀況檢視

traceroute

用於確定資料包從一個主機到另一個主機所經過的路由路徑。

 

mtr

用於網路故障定位和效能分析。mtr 命令可以連續傳送 ICMP 報文,並在每一跳的路由器上進行網路延遲和丟包率的統計,用於找出網路故障的根源。

 

網路狀態和計數檢視

netstat

用於檢視網路連線、路由表、網路介面狀態等資訊。透過 netstat 命令可以瞭解當前系統的網路狀況。

 

ss

ss 命令是 netstat 的替代品,用於檢視網路連線狀態、監聽埠、網路介面等資訊。與 netstat 不同的是,ss 命令提供了更快的速度和更多的選項。

 

ifconfig

用於檢視和配置網路介面。透過 ifconfig 命令可以檢視網路介面的 IP 地址、MAC 地址、網路狀態等資訊。

 
ip

配置和管理網路介面、路由表、ARP 快取和其他網路相關的屬性。

 

curl cip.cc

檢視網路出口地址。

 

ethtool

用於檢視和配置網路介面的驅動程式。透過 ethtool 命令可以檢視網路介面的狀態、速度、雙工模式等資訊,並進行網路效能調優。

 

iftop

用於實時監控網路流量。iftop 命令可以顯示每個網路介面的實時流量、連線數、連線速度等資訊,用於快速診斷網路瓶頸和流量異常。

 

nethogs

用於檢視程式佔用的網路頻寬。透過 nethogs 命令可以檢視每個程式佔用的網路頻寬、連線數和流量等資訊,用於找出網路資源佔用高的程式。

 

dns相關

nslookup

用於查詢 DNS 伺服器上的主機名和 IP 地址資訊。透過 nslookup 命令可以檢視主機名對應的 IP 地址、反向 DNS 解析等資訊。

 

dig 

查詢 DNS 伺服器上的主機名和 IP 地址資訊。與 nslookup 不同的是,dig 命令提供了更多的選項和功能。  

系統異常檢視

dmesg

用於檢視核心日誌。透過 dmesg 命令可以檢視系統核心的日誌資訊,包括硬體檢測、裝置驅動載入等資訊,用於排查和分析系統硬體和驅動問題。

比如oom、segment fault都可以在這裡面看到相應的記錄。

systemctl

用於管理 systemd 服務。透過 systemctl 命令可以啟動、停止、重啟和查詢 systemd 服務的狀態,用於排查和處理系統服務異常問題。

 

journalctl

用於檢視系統日誌。透過 journalctl 命令可以檢視系統日誌、過濾日誌資訊、按時間戳或者程式名等條件搜尋日誌資訊,用於排查和分析系統異常和錯誤。

 

記憶體異常

valgrind

檢查程式在執行時的記憶體訪問錯誤、洩漏等問題。 無需修改程式碼

asan

可以測常見的記憶體安全問題,例如緩衝區溢位、使用未初始化的記憶體等。  

效能定位

 

top

實時監控系統 CPU、記憶體、程式等資源的使用情況,用於找出系統資源佔用高的程式。

看出是使用者態高還是核心態高,是否是io高等。

vmstat

用於顯示系統虛擬記憶體(VM)的使用情況。它提供了對系統記憶體、程式、CPU 等效能資料的實時監控。

可快速看出上下文切換次數。

pidstat

程式級別統計cpu、io、上下文切換等資訊。

看出上下文切換中自願切換和非自願切換次數。

sar

監測 CPU 使用率、磁碟 I/O、網路流量、記憶體使用情況、程式活動等多個方面的資料,並將這些資料儲存到本地或遠端系統中,以供後續分析和處理。

可快速統計流量。

perf

可以用於測量和分析系統各個方面的效能資料,包括 CPU、記憶體、磁碟、網路等方面的資料。

cpu取樣一把好手,看哪些函式是高頻出現。還可以結合其他工具生成火焰圖。

pprof

用於分析 Go 應用程式效能的工具,可以分析 CPU、記憶體和程式碼分佈等方面的效能問題。

go言專用更強大的取樣工具。

strace

用於跟蹤程式的系統呼叫和訊號。

 

bpftrace

動態跟蹤工具,它使用 BPF(Berkeley Packet Filter)技術來實現高效的核心和使用者空間跟蹤功能。

比如打印某個函式的系統呼叫棧和使用者空間呼叫棧。本的方式使用ebpf工具。

bcc

基於 BPF(Berkeley Packet Filter)技術的動態跟蹤和效能分析工具集,主要用於 Linux 系統的核心和使用者空間程式分析。

比bpftrace更靈活。

網路場景構造

iptables

用於設定和管理 Linux 核心的防火牆。透過 iptables 命令可以設定網路連線的規則、過濾資料包、進行網路地址轉換等操作。

可以對特定特徵進行丟包,轉換。

tc

流量控制、網路流量排程和佇列管理的工具,可用於實現各種 QoS(Quality of Service)和網路流量控制功能

比如對特定流量增加丟包率、時延等。

postman

一款流行的 API 測試工具,可以幫助開發人員快速建立、測試、除錯和共享 API。

 
流量複製和重放

goreplay

 

一個 HTTP 實時流量複製工具。支援流量的放大、縮小,頻率限制,還支援把請求記錄到檔案,方便回放和分析,也支援和 ElasticSearch 整合。

 

tcpreplay

 

一種 pcap 包的重放工具,它可以將用 ethreal、wireshark工具抓下來的包原樣或經過任意修改後重放回去。它允許你對報文做任意的修改指定重放報文的速度等,這樣tcpreplay 就可以用來複現抓包的情景以定位 bug,以極快的速度重放從而實現壓力測試。

 

tcpcopy

一種請求複製工具 ,透過複製線上資料包,修改 TCP/IP 頭部資訊,傳送給測試伺服器,達到欺騙測試伺服器的TCP 程式的目的。

 

效能壓測

iperf

用於測試網路頻寬和效能。透過 iperf 命令可以在兩個主機之間進行頻寬測試和效能測試,用於評估網路的實際效能。

適合傳輸層壓測、頻寬壓測等場景。

ApacheBench (ab)

一個基於 Apache HTTP 伺服器的效能測試工具,用於測試 Web 伺服器的負載能力

適合應用層壓測。

wrk

一個高效能的 HTTP 壓力測試工具,支援多執行緒和支援 Lua 指令碼擴充套件。

 

stress

一個簡單但功能強大的 Linux 壓力測試工具,可以測試 CPU、記憶體、I/O、網路等方面的效能。

 
在我的公眾號中有一篇文章---怎樣進行問題定位,總結了開發者定位問題的方法論。熟悉工具和命令只能幫我們快速收集資訊和對假設做出驗證。除了熟悉工具,更重要的是具備過硬的基礎知識、熟悉程式碼流程,並懂什麼時候收集什麼資訊,然後將這些命令和工具熟練的應用到工作中。
歡迎關注我的個人技術公眾號:

 

相關文章