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