性能之巅:Linux网络性能分析工具-netstat,ifconfig,nicstat,traceroute,tcpdump
原文地址:http://www.infoq.com/cn/articles/linux-networking-performance-analytics
本文介紹基于Linux操作系統(tǒng)的網(wǎng)絡性能分析工具。它們的使用策略參見前面的部分。
本節(jié)介紹的工具列于下表中。
| Linux | Solaris | 描述 |
| netstat | netstat | 多種網(wǎng)絡棧和接口統(tǒng)計信息 |
| sar | - | 統(tǒng)計信息歷史 |
| ifconfig | ifconfig | 接口配置 |
| ip | dladm | 網(wǎng)絡接口統(tǒng)計信息 |
| nicstat | nicstat | 網(wǎng)絡接口吞吐量和使用率 |
| ping | ping | 測試網(wǎng)絡連通性 |
| traceroute | traceroute | 測試網(wǎng)絡路由 |
| pathchar | pathchar | 確定網(wǎng)絡路徑特征 |
| tcpdump | snoop/tcpdump | 網(wǎng)絡數(shù)據(jù)包嗅探器 |
| Wireshark | Wireshark | 圖形化網(wǎng)絡數(shù)據(jù)包檢查器 |
| DTrace, perf | DTrace | TCP/IP棧跟蹤:連接、數(shù)據(jù)包、丟包、延時 |
本文將僅介紹Linux系統(tǒng)中的前7個網(wǎng)絡性能分析工具。一開始是系統(tǒng)層面的統(tǒng)計數(shù)據(jù),進而向下挖掘到包嗅探和事件跟蹤。完整的功能請參考這些工具的文檔,包括Man手冊。
netstat
基于使用的選項,netstat(8)命令能報告多種類型的網(wǎng)絡統(tǒng)計數(shù)據(jù),就像具有多種功能的組合工具。選項介紹如下:
- (默認):列出連接的套接字。
- -a:列出所有套接字的信息。
- -s:網(wǎng)絡棧統(tǒng)計信息。
- -i:網(wǎng)絡接口信息。
- -r:列出路由表。
其他選項能修改輸出,例如-n不解析IP地址為主機名,以及-v(可用時)顯示冗長的詳細信息。
一個netstat(8)接口統(tǒng)計信息的示例如下:
數(shù)據(jù)列包括網(wǎng)絡接口(Iface)、MTU,以及一系列接收(RX-)和傳輸(TX-)的指標。
- OK:成功傳輸?shù)臄?shù)據(jù)包。
- ERR:錯誤數(shù)據(jù)包。
- DRP:丟包。
- OVR:超限。
丟包和超限是網(wǎng)絡接口飽和的指針,并且能和錯誤一起用USE方法檢查。
-c連續(xù)模式能與-i一并使用,每秒輸出這些累積的計數(shù)器。它提供計算數(shù)據(jù)包速率的數(shù)據(jù)。
下面是一個netstat(8)網(wǎng)絡棧統(tǒng)計數(shù)據(jù)(片段)的示例:
輸出列出了多項按協(xié)議分組的網(wǎng)絡數(shù)據(jù),主要是來自TCP的。所幸的是,其中多數(shù)有較長的描述性名稱,因此它們的意思顯而易見。不幸的是這些輸出缺乏一致性而且有拼寫錯誤,用程序處理這段文字比較麻煩。
許多與性能相關的指標以加粗強調,用以指出可用的信息。其中許多指標要求對TCP行為的深刻理解,包括近些年引入的的最新功能和算法。下面是一些值得查找的示例指標。
- 相比接收的總數(shù)據(jù)包更高速的包轉發(fā)率:檢查服務器是否應該轉發(fā)(路由)數(shù)據(jù)包。
- 開放的被動連接:監(jiān)視它們能顯示客戶機連接負載。
- 相比發(fā)送的數(shù)據(jù)段更高的數(shù)據(jù)段重傳輸率:能支持網(wǎng)絡的不穩(wěn)定。這可能是意料之中的(互聯(lián)網(wǎng)客戶)。
- 套接字緩沖超限導致的數(shù)據(jù)包從接收隊列中刪除:這是網(wǎng)絡飽和的標志,能夠通過增加套接字緩沖來修復——前提是有足夠的系統(tǒng)資源支持應用程序。
一些統(tǒng)計信息名稱包括拼寫錯誤。如果其他的監(jiān)視工具建立在同樣的輸出上,簡單地修復它們可能有問題。這類工具最好能從/proc資源讀取這些統(tǒng)計信息,它們是/proc/net/snmp和/proc/net/netstat。例如:
/proc/net/snmp統(tǒng)計信息也用于SNMP管理信息庫(MIB),它提供關于每個統(tǒng)計信息的用途的更進一步的文檔。擴展的統(tǒng)計信息在/proc/net/netstat中。
netstat(8)可以接受以秒為單位的時間間隔,它按每個時間間隔連續(xù)地輸出累加的計數(shù)器。后期處理這些輸出可以計算每個計數(shù)器的速率。
sar
系統(tǒng)活動報告工具sar(1)可以觀測當前活動并且能配置為保存和報告歷史統(tǒng)計數(shù)據(jù)。第4章中介紹過它,并且本書的多個章節(jié)在需要時也會提及它。
Linux版本用以下選項提供網(wǎng)絡統(tǒng)計信息。
- -n DEV:網(wǎng)絡接口統(tǒng)計信息。
- -n EDEV:網(wǎng)絡接口錯誤。
- -n IP:IP數(shù)據(jù)報統(tǒng)計信息。
- -n EIP:IP錯誤統(tǒng)計信息。
- -n TCP:TCP統(tǒng)計信息。
- -n ETCP:TCP錯誤統(tǒng)計信息。
- -n SOCK:套接字使用。
提供的統(tǒng)計信息見下表。
| 選項 | 統(tǒng)計信息 | 描述 | 單位 |
| -n DEV | rxpkg/s | 接收的數(shù)據(jù)包 | 數(shù)據(jù)包/s |
| -n DEV | txpkt/s | 傳輸?shù)臄?shù)據(jù)包 | 數(shù)據(jù)包/s |
| -n DEV | rxkB/s | 接收的千字節(jié) | 千字節(jié)/s |
| -n DEV | txkB/s | 傳輸?shù)那ё止?jié) | 千字節(jié)/s |
| -n EDEV | rxerr/s | 接收數(shù)據(jù)包錯誤 | 數(shù)據(jù)包/s |
| -n EDEV | txerr/s | 傳輸數(shù)據(jù)包錯誤 | 數(shù)據(jù)包/s |
| -n EDEV | coll/s | 碰撞 | 數(shù)據(jù)包/s |
| -n EDEV | rxdrop/s | 接收數(shù)據(jù)包丟包(緩沖滿) | 數(shù)據(jù)包/s |
| -n EDEV | txdrop/s | 傳輸數(shù)據(jù)包丟包(緩沖滿) | 數(shù)據(jù)包/s |
| -n EDEV | rxfifo/s | 接收的數(shù)據(jù)包FIFO超限錯誤 | 數(shù)據(jù)包/s |
| -n EDEV | txfifo/s | 傳輸?shù)臄?shù)據(jù)包FIFO超限錯誤 | 數(shù)據(jù)包/s |
| -n IP | irec/s | 輸入的數(shù)據(jù)報文(接收) | 數(shù)據(jù)報文/s |
| -n IP | fwddgm/s | 轉發(fā)的數(shù)據(jù)報文 | 數(shù)據(jù)報文/s |
| -n IP | orq/s | 輸出的數(shù)據(jù)報文請求(傳輸) | 數(shù)據(jù)報文/s |
| -n EIP | idisc/s | 輸入的丟棄(例如,緩沖滿) | 數(shù)據(jù)報文/s |
| -n EIP | odisc/s | 輸出的丟棄(例如,緩沖滿) | 數(shù)據(jù)報文/s |
| -n TCP | active/s | 新的主動TCP連接(connect()) | 連接數(shù)/s |
| -n TCP | active/s | 新的被動TCP連接(listen()) | 連接數(shù)/s |
| -n TCP | active/s | 輸入的段(接收) | 段/s |
| -n TCP | active/s | 輸出的段(接收) | 段/s |
| -n ETCP | active/s | 主動TCP失敗連接 | 連接數(shù)/s |
| -n ETCP | active/s | TCP段重傳 | 段/s |
| -n SOCK | totsck | 使用中的總數(shù)據(jù)包 | sockets |
| -n SOCK | ip-frag | 當前隊列中的IP數(shù)據(jù)片 | fragments |
| -n SOCK | tcp-tw | TIME-WAIT中的TCP套接字 | sockets |
這里,許多統(tǒng)計信息名稱包括方向和計量單位:rx是“接收”,i是“輸入”,seg是“段”,依此類推。完整的列表參考Man手冊,它包括ICMP、UDP、NFS和IPv6在內(nèi)的統(tǒng)計信息以及對應的SNMP名稱的說明(例如,ipInReceives對應irec/s)。
以下示例是每秒打印的TCP統(tǒng)計信息:
輸出顯示被動連接率(入站)接近30/s。
網(wǎng)絡接口統(tǒng)計信息列(NET)列出所有接口,然而通常只對一個接口感興趣。以下示例利用awk(1)過濾輸出:
這顯示出傳輸和發(fā)送的網(wǎng)絡吞吐量。這里雙向的速率都超過了2MB/s。
ifconfig
ifconfig(8)命令能手動設置網(wǎng)絡接口。它也可以列出所有接口的當前配置。用它來檢查系統(tǒng)、網(wǎng)絡以及路由設置有助于靜態(tài)性能調優(yōu)。
Linux版本的輸出包括以下這些統(tǒng)計信息:
這些計數(shù)器與之前介紹的netstat -i命令一致。txqueuelen是這個接口發(fā)送隊列的長度。Man手冊介紹了這個數(shù)值的調優(yōu):
對于速度較低的高延時設備(調制解調器連接,ISDN),設置較小的值有助于預防高速的大量傳輸影響如telnet在內(nèi)的交互通信。
Linux中,ifconfig(8)已經(jīng)被ip(8)命令淘汰。
ip
Linux的ip(8)命令能配置網(wǎng)絡接口和路由,并且觀測它們的狀態(tài)和統(tǒng)計信息。例如,顯示連接統(tǒng)計信息:
除了添加了接收(RX)和傳輸(TX)字節(jié),這些計數(shù)器與之前介紹的netstat -i命令一致。這利于方便地觀測吞吐量,不過ip(8)不提供按時間間隔輸出報告的方式(利用sar(1))。
nicstat
最初為基于Solaris的系統(tǒng)編寫,nicstat(1)這個開源工具輸出包括吞吐量和使用率在內(nèi)的網(wǎng)絡接口統(tǒng)計信息。nicstat(1)延續(xù)傳統(tǒng)的資源統(tǒng)計工具iostat(1M)和mpstat(1M)的風格。用C和Perl編寫的版本可用于基于Solaris和Linux的系統(tǒng)[3]。
例如以下的1.92 Linux版本的輸出:
最前面的輸出是自系統(tǒng)啟動以來的總結,緊接著是按時間間隔的總結。這里的時間間隔總結顯示了eth4接口的使用率為35%(這里報告的是當前RX或者TX方向的最大值),并且讀速度為42MB/s。
字段包括接口名稱(Int)、最大使用率(%Util)、反映接口飽和度的統(tǒng)計信息(Sat),以及一系列帶前綴的統(tǒng)計信息:r是“讀”(接收)而w是“寫”(傳輸)。
- KB/s:千字節(jié)每秒。
- Pk/s:數(shù)據(jù)包每秒。
- Avs/s:平均數(shù)據(jù)包大小,以字節(jié)為單位。
該版本支持多種選項,包括-z用來忽略數(shù)值為0的行(閑置的接口)以及-t顯示TCP統(tǒng)計信息。
由于能提供使用率和飽和度數(shù)值,nicstat(1)特別適用于USE方法。
ping
ping(8)命令發(fā)送ICMP echo請求數(shù)據(jù)包測試網(wǎng)絡連通性。例如:
輸出顯示每個包的往返時間(rtt)并總結各種統(tǒng)計信息。由于時間戳是由ping(8)命令自己計量的,其中包括獲取時間戳到處理網(wǎng)絡I/O的整個CPU代碼路徑執(zhí)行時間。
與應用程序協(xié)議相比,路由器可能以較低的優(yōu)先級處理ICMP數(shù)據(jù)包,因而延時可能比通常情況下有更高的波動。
traceroute
traceroute(8)命令發(fā)出一系列數(shù)據(jù)包實驗性地探測到一個主機當前的路由。它的實現(xiàn)利用了遞增每個數(shù)據(jù)包IP協(xié)議的生存時間(TTL),從而導致網(wǎng)關順序地發(fā)送ICMP超時響應報文,向主機揭示自己的存在(如果防火墻沒有攔截它們)。
例如測試一個加利福尼亞的主機與一個弗吉尼亞的目標間當前的路由:
每一跳顯示連續(xù)的三個RTT,它們可用作網(wǎng)絡延時統(tǒng)計信息的粗略數(shù)據(jù)源。類似ping(8),由于發(fā)送低優(yōu)先級的數(shù)據(jù)包,它可能會顯示出比其他應用程序協(xié)議更高的延時。
也可以把顯示的路徑作為靜態(tài)性能調優(yōu)的研究對象。網(wǎng)絡被設計為動態(tài)的并且能響應故障。路徑的變化可能會降低性能。
書籍介紹
《性能之巔:洞悉系統(tǒng)、企業(yè)與云計算》基于Linux 和Solaris系統(tǒng)闡述了適用于所有系統(tǒng)的性能理論和方法,Brendan Gregg 將業(yè)界普遍承認的性能方法、工具和指標收集于本書之中。閱讀本書,你能洞悉系統(tǒng)運作的方式,學習到分析和提高系統(tǒng)與應用程序性能的方法,這些性能方法同樣適用于大型企業(yè)與云計算這類最為復雜的環(huán)境的性能分析與調優(yōu)。
《新程序員》:云原生和全面數(shù)字化實踐50位技術專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的性能之巅:Linux网络性能分析工具-netstat,ifconfig,nicstat,traceroute,tcpdump的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux 下的格式化输出命令:prin
- 下一篇: 完善Linux/UNIX审计 将每个sh