本文章來自我的微信個人技術公眾號 網路技術修煉,公眾號中總結普及網路基礎知識,包括基礎原理、網路方案、開發經驗和問題定位案例等,歡迎關註。 Linux網路開發者面臨的問題往往比較複雜,因此需要使用一些工具和命令來進行定位和解決。在本篇博客中,我將總結一些常用的Linux網路開發者工具和命令,包括網路 ...
本文章來自我的微信個人技術公眾號---網路技術修煉,公眾號中總結普及網路基礎知識,包括基礎原理、網路方案、開發經驗和問題定位案例等,歡迎關註。
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、網路等方面的性能。 |