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