一文掌握 Linux 性能分析之網絡篇(續)


本文首發於我的公眾號 Linux雲計算網絡(id: cloud_dev),專注於干貨分享,號內有 10T 書籍和視頻資源,后台回復「1024」即可領取,歡迎大家關注,二維碼文末可以掃。

這是 Linux 性能分析系列的第五篇,前四篇在這里:

一文掌握 Linux 性能分析之 CPU 篇

一文掌握 Linux 性能分析之內存篇

一文掌握 Linux 性能分析之 IO 篇

一文掌握 Linux 性能分析之網絡篇

在上篇網絡篇中,我們已經介紹了幾個 Linux 網絡方向的性能分析工具,本文再補充幾個。總結下來,余下的工具包括但不限於以下幾個:

  • sar:統計信息歷史
  • traceroute:測試網絡路由
  • dtrace:TCP/IP 棧跟蹤
  • iperf / netperf / netserver:網絡性能測試工具
  • perf 性能分析神器

由於篇幅有限,本文會先介紹前面兩個,其他工具留作后面介紹,大家可以持續關注。

sar

sar 是一個系統歷史數據統計工具。統計的信息非常全,包括 CPU、內存、磁盤 I/O、網絡、進程、系統調用等等信息,是一個集大成的工具,非常強大。在 Linux 系統上 sar --help 一下,可以看到它的完整用法。

  • -A:所有報告的總和
  • -u:輸出 CPU 使用情況的統計信息
  • -v:輸出 inode、文件和其他內核表的統計信息
  • -d:輸出每一個塊設備的活動信息
  • -r:輸出內存和交換空間的統計信息
  • -b:顯示 I/O和傳送速率的統計信息
  • -a:文件讀寫情況
  • -c:輸出進程統計信息,每秒創建的進程數
  • -R:輸出內存頁面的統計信息
  • -y:終端設備活動情況
  • -w:輸出系統交換活動信息
  • -n:輸出網絡設備統計信息

在平時使用中,我們常常用來分析網絡狀況,其他幾項的通常有更好的工具來分析。所以,本文會重點介紹 sar 在網絡方面的分析手法。

Linux 系統用以下幾個選項提供網絡統計信息:

  • -n DEV:網絡接口統計信息。
  • -n EDEV:網絡接口錯誤。
  • -n IP:IP 數據報統計信息。
  • -n EIP:IP 錯誤統計信息。
  • -n TCP:TCP 統計信息。
  • -n ETCP:TCP 錯誤統計信息。
  • -n SOCK:套接字使用。

我們來看幾個示例:

(1)每秒打印 TCP 的統計信息。

sar -n TCP 1

幾個參數了解一下:

  • active/s:新的 TCP 主動連接(也就是 socket 中的 connect() 事件),單位是:連接數/s。
  • passive/s:新的 TCP 被動連接(也就是 socket 中的 listen() 事件)。
  • iseg/s:接收的段(傳輸層以段為傳輸單位),單位是:段/s
  • oseg/s:發送的段。
    通過這幾個參數,我們基本可以知道當前系統 TCP 連接的負載情況。

(2)每秒打印感興趣的網卡的統計信息

sar -n DEV 1 | awk 'NR == 3 || $3 == "eth0"'

幾個參數了解一下:

  • rxpck/s / txpck/s:網卡接收/發送的數據包,單位是:數據包/s。
  • rxkB/s / txkB/s:網卡接收/發送的千字節,單位是:千字節/s。
  • rxcmp/s / txcmp/s:網卡每秒接受/發送的壓縮數據包,單位是:數據包/s。
  • rxmcst/s:每秒接收的多播數據包,單位是:數據包/s。
  • %ifutil:網絡接口的利用率。
    這幾個參數對於分析網卡接收和發送的網絡吞吐量很有幫助。

(3)錯誤包和丟包情況分析

sar -n EDEV 1

幾個參數了解一下:

  • rxerr/s / txerr/s:每秒鍾接收/發送的壞數據包
  • coll/s:每秒沖突數
  • rxdrop/s:因為緩沖充滿,每秒鍾丟棄的已接收數據包數
  • txdrop/s:因為緩沖充滿,每秒鍾丟棄的已發送數據包數
  • txcarr/s:發送數據包時,每秒載波錯誤數
  • rxfram/s:每秒接收數據包的幀對齊錯誤數
  • rxfifo/s / txfifo/s:接收/發送的數據包每秒 FIFO 過速的錯誤數
    當發現接口傳輸數據包有問題時,查看以上參數能夠讓我們快速判斷具體是出的什么問題。

OK,這個工具就介紹到這里,以上只是拋磚引玉,更多技巧還需要大家動手去探索,只有動手,才能融會貫通。

traceroute

traceroute 也是一個排查網絡問題的好工具,它能顯示數據包到達目標主機所經過的路徑(路由器或網關的 IP 地址)。如果發現網絡不通,我們可以通過這個命令來進一步判斷是主機的問題還是網關的問題。

它通過向源主機和目標主機之間的設備發送一系列的探測數據包(UDP 或者 ICMP)來發現設備的存在,實現上利用了遞增每一個包的 TTL 時間,來探測最終的目標主機。比如開始 TTL = 1,當到達第一個網關設備的時候,TTL - 1,TTL = 0 導致網關響應一個 ICMP 超時報文,這樣,如果沒有防火牆攔截的話,源主機就知道網關設備的地址。以此類推,逐步增加 TTL 時間,就可以探測到目標主機之間所經過的路徑。

為了防止發送和響應過程出現問題導致丟包,traceroute 默認會發送 3 個探測包,我們可以用 -q x 來改變探測的數量。如果中間設備設置了防火牆限制,會導致源主機收不到響應包,就會顯示 * 號。如下是 traceroute baidu 的結果:

每一行默認會顯示設備名稱(IP 地址)和對應的響應時間。發送多少個探測包,就顯示多少個。如果只想顯示 IP 地址可以用 -n 參數,這個參數可以避免 DNS 域名解析,加快響應時間。

和這個工具類似的還有一個工具叫 pathchar,但平時用的不多,我就不介紹了。

以上就是兩個工具的簡單介紹,工具雖然簡單,但只要能解決問題,就是好工具。當然,性能分析不僅僅依靠工具就能解決的,更多需要我們多思考、多動手、多總結,逐步培養自己的系統能力,才能融會貫通

參考:

iperf3
netperf netserver
https://www.jianshu.com/p/42e0fa6bf79c


我的公眾號 「Linux雲計算網絡」(id: cloud_dev) ,號內有 10T 書籍和視頻資源,后台回復 「1024」 即可領取,分享的內容包括但不限於 Linux、網絡、雲計算虛擬化、容器Docker、OpenStack、Kubernetes、工具、SDN、OVS、DPDK、Go、Python、C/C++編程技術等內容,歡迎大家關注。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM