linux系統性能監控--網絡利用率

    Linux中提供了許多有助於評估各類 Linux網絡性能的監視工具,其中一些監視工具也可用於解決網絡問題以及監視性能。 Linux內核爲用戶提供了大量的網絡系統信息,這有助於監視網絡的健康狀態並檢測在配置、運行期間以及性能方面出現的問題。

    下面分析在大多數 Linux主要發行版本中提供的一些網絡工具,包括 netstatnfsstattcpdumpethtoolsnmpifportifconfigroutearppingtraceroutehost以及nslookup 。web

    系統和網絡管理員天天都會使用其中的某些工具。諸如 pingroutearptracerouteethtooltcpdump之類的工具經常使用於斷定網絡問題。 這些工具描述以下:shell

  • ping ipaddress/hostname 命令能夠顯示計算機是否正在運行以及網絡鏈接是否正常。該命令使用互聯網控制消息協議(Internet Control Message ProtocolICMP)中的Echo功能。 該命令經過網絡將一個小型報文發至指定的 IP地址。 若是能夠收到該報文的應答消息, 則代表這條計算機網絡鏈接是存活的。該命令還能夠顯示出
    在源計算機和目的計算機之間存在着多少箇中間跳數。

  • route 命令能夠顯示路由表內容,在路由表中增刪路由,以及清空全部的路由信息。若是ping命令不起做用,即網絡鏈接沒有激活,那麼可使用 arp命令來肯定問題根源。該命令的-a選項能夠肯定硬件地址是否正確地關聯到適當的系統上,其餘可用的選項包括清空arp緩存、向 arp緩存中添加信息等 。
  • ifconfig 能夠肯定主機的介質訪問控制地址。若是網絡上存在着另外一臺具備相同 IP地址的主機,則該主機的介質訪問控制地址可能已存在於本機的 arp緩存中。在這種狀況下, 可使用 arp命令來刪除緩存中保存的地址並將正確的地址添加到arp緩存中。
  • traceroute 能夠跟蹤報文的某條路由路徑。 當報文在網絡中傳輸時, 該命令可以測量報文在每一跳(路由器)之間傳輸所用的時間,並標識出每一跳的地址。
  •  ethtool 能夠查詢並修改以太網設備的設置參數。每一個設備都被分配一個標識編號,例如對於系統中的 n個以太網設備,其編號爲 eth0eth1ethnethtool工具使用這種設備名稱來查詢/修改設置信息。
  • tcpdump 對網絡報文進行嗅探,可以捕獲計算機在網絡上可見的全部報文。該工具可用於網絡監視、 協議調試以及數據獲取等功能。該命令將 NIC設置爲雜收(promiscuous)模式以便捕獲全部流經物理線路的報文。該命令提供了大量關於輸出結果的過濾選項, 能夠只顯示須要關注的報文類型。但其缺點是緩衝區可能會發生溢出。 在高帶寬網絡上執行 tcpdump操做還有可能會丟棄報文, 即 tcpdump的處理速度沒法匹配報文的傳輸速率。
  • ethereal是另外一種相似於 tcpdump的網絡嗅探工具, 能夠讀取 tcpdump所捕獲的文
    件。
  • host 工具用於從域名系統(Domain Name System)中獲取指定 IP地址的主機名。該工具遠比 nslookup更靈活,而且適於在 shell腳本中使用。
    Linux上提供的網絡安全工具包括 snort(一種網絡入侵檢測系統)dsniff(一套強大的網絡審計和滲透測試工具)以及 SAINT(Security Administrator's Integrated Network Tool) 。


1、網絡統計信息
    netstat是監視 Linux服務器上網絡鏈接的最經常使用工具之一。該工具能夠顯示每種網絡協議例如 TCPUDP的活躍 socket列表,還提供了關於網絡路由的信息以及網絡接口的累積統計數據, 包括輸入輸出報文數量以及報文衝突次數。 隨後的 netstat輸出信息顯示了大量網絡協議統計數據和路由信息, 例如互聯網協議(IP)、傳輸控制協議(TCP)和用戶數據報協議(UDP)。基於這些統計信息,能夠斷定收到的報文數目是否高於或低於預期值。該工具能夠方便地用於研究內核版本之間的性能差別。

    若是沒有任何參數的話, netstat能夠枚舉出已有的網絡 socket及其鏈接狀況,而且可以顯示全部協議系列(包括 UNIX域套接字)的信息。 如下是輸出樣本中的典型數據行 。
[solarflar@localhost ~]$ netstat 
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 192.168.75.189:ssh      172.29.8.150:51963      TIME_WAIT  
tcp        0      0 192.168.75.189:ssh      192.168.194.59:48183    ESTABLISHED
tcp        0     52 192.168.75.189:ssh      172.29.8.150:52999      ESTABLISHED
tcp        0      0 192.168.75.189:ssh      192.168.194.55:19001    ESTABLISHED
tcp        0      0 192.168.75.189:ssh      192.168.194.55:17796    ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ]         DGRAM                    29748    /run/systemd/shutdownd
unix  2      [ ]         DGRAM                    11475    /run/systemd/notify
unix  5      [ ]         DGRAM                    11496    /run/systemd/journal/socket
unix  16     [ ]         DGRAM                    11498    /dev/log
unix  3      [ ]         STREAM     CONNECTED     37002    /run/systemd/journal/stdout
unix  3      [ ]         STREAM     CONNECTED     23698    /run/systemd/journal/stdout
    第1列顯示了 socket的協議系列, 它一般是 tcp(transport control protocol, 傳輸控制協議)udp(user datagram protocol, 用戶數據報協議)unix(UNIX domain socketUNIX域套接字)
    第 2列和第 3列顯示了在 socket接收和發送隊列中當前存在的數據字節數;
    後面各列顯示了本地和遠程地址及端口信息;最後一列顯示了
socket當前的協議狀態。
    若是
netstat 命令未攜帶標誌-n 的話,則 IP 地址一般轉換成主機名(nethostAnethostB)
    若是隻要顯示特定地址系列的內容,能夠在命令中提供相應的標誌。 例如
, netstat –tcp-t只顯示前TCPsocket關於各個地址系列的完整標誌列表參見netstatman命令幫助。
    星號
(*)表示通配符, 在指代本地地址時一般是監聽全部本地接口的監聽進程。 當該socket向遠程主機發起鏈接並進入已創建(established)狀態時,會顯示出遠程主機地址和端口信息。


2、接口信息
    Netstat給出的接口信息與 ifconfig命令所顯示的內容相同。該信息是接口所提供的統計信息列表。 這些信息包括最大傳輸單元(maximum transmission unitMTU),以及接收和發送報文中傳輸成功的、經過某種方式出錯的、丟棄的或溢出的報文數。
[solarflar@localhost ~]$ netstat -i
Kernel Interface table
Iface      MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eno1      1500 2034333467      0    182 0      3548944453      0      0      0 BMRU
eno2      1500        0      0      0 0             0      0      0      0 BMU
eno3      1500        0      0      0 0             0      0      0      0 BMU
eno4      1500        0      0      0 0             0      0      0      0 BMU
enp131s0  1500 1591418974      0  52118 0      486169278      0      0      0 BMRU
enp131s0  1500        0      0      0 0             0      0      0      0 BMU
lo       65536 594975131      0      0 0      594975131      0      0      0 LRU

3、TCP/IP協議統計數據
    netstat工具顯示了存在於內核中的大多數計數器,但並未涵蓋所有計數器。要查看被計數事件的完整列表,能夠瀏覽/proc/net/snmp/proc/net/netstat文件的內容。前者包含了 RFC 2012中定義的計數器, 後者包含了與 Linux相關的擴展 MIB。如下是由 netstat -s命令生成的 SNMP計數器的樣本列表。

[solarflar@localhost ~]$ netstat -s
Ip:
    4603736451 total packets received
    0 forwarded
    0 incoming packets discarded
    4423014584 incoming packets delivered
    4398660228 requests sent out
    42782 outgoing packets dropped
    22 dropped because of missing route
    36615113 reassemblies required
    7960999 packets reassembled ok
    1967473 fragments received ok
    9530756 fragments created
Icmp:
    1236458 ICMP messages received
    1826 input ICMP message failed.
    ICMP input histogram:
        destination unreachable: 1236301
        echo requests: 71
        echo replies: 74
        timestamp request: 4
        address mask request: 8
    405465 ICMP messages sent
    0 ICMP messages failed
    ICMP output histogram:
        destination unreachable: 405135
        echo request: 255
        echo replies: 71
        timestamp replies: 4
IcmpMsg:
        InType0: 74
        InType3: 1236301
        InType8: 71
        InType13: 4
        InType17: 8
        OutType0: 71
        OutType3: 405135
        OutType8: 255
        OutType14: 4
Tcp:
    554771 active connections openings
    5422 passive connection openings
    551155 failed connection attempts
    1918 connection resets received
    6 connections established
    59059673 segments received
    69625408 segments send out
    24976 segments retransmited
    6 bad segments received.
    70797 resets sent
    InCsumErrors: 1
Udp:
    4325339161 packets received
    999602 packets to unknown port received.
    396416917 packet receive errors
    4345291695 packets sent
    10913928 receive buffer errors
    37346 send buffer errors
UdpLite:
TcpExt:
    32 invalid SYN cookies received
    36 resets received for embryonic SYN_RECV sockets
    73 packets pruned from receive queue because of socket buffer overrun
    4652 TCP sockets finished time wait in fast timer
    169068 delayed acks sent
    36 delayed acks further delayed because of locked socket
    Quick ack mode was activated 3651 times
    26222704 packets directly queued to recvmsg prequeue.
    3711962702 bytes directly in process context from backlog
    15106819553 bytes directly received in process context from prequeue
    2655495 packet headers predicted
    31357215 packets header predicted and directly queued to user
    3062089 acknowledgments not containing data payload received
    31242645 predicted acknowledgments
    2010 times recovered from packet loss by selective acknowledgements
    Detected reordering 2 times using FACK
    2 congestion windows fully recovered without slow start
    308 congestion windows recovered without slow start by DSACK
    267 congestion windows recovered without slow start after partial ack
    TCPLostRetransmit: 226
    12 timeouts after SACK recovery
    1 timeouts in loss state
    4619 fast retransmits
    3282 forward retransmits
    413 retransmits in slow start
    518 other TCP timeouts
    TCPLossProbes: 15920
    TCPLossProbeRecovery: 14042
    41 SACK retransmits failed
    7152 packets collapsed in receive queue due to low socket buffer
    4731 DSACKs sent for old packets
    2 DSACKs sent for out of order packets
    15907 DSACKs received
    11 DSACKs for out of order packets received
    10 connections reset due to unexpected data
    42 connections reset due to early user close
    206 connections aborted due to timeout
    TCPDSACKIgnoredOld: 1
    TCPDSACKIgnoredNoUndo: 13716
    TCPSpuriousRTOs: 40
    TCPSackShifted: 19573
    TCPSackMerged: 2838
    TCPSackShiftFallback: 15102
    TCPRetransFail: 6
    TCPRcvCoalesce: 172790
    TCPOFOQueue: 62042
    TCPOFOMerge: 2
    TCPChallengeACK: 199
    TCPSYNChallenge: 5
    TCPAutoCorking: 133696
    TCPFromZeroWindowAdv: 20
    TCPToZeroWindowAdv: 20
    TCPWantZeroWindowAdv: 1589
    TCPSynRetrans: 33
    TCPOrigDataSent: 60622666
    TCPHystartTrainDetect: 154
    TCPHystartTrainCwnd: 3092
    TCPHystartDelayDetect: 21
    TCPHystartDelayCwnd: 899
    TCPACKSkippedSeq: 197
    TCPACKSkippedChallenge: 1
IpExt:
    InMcastPkts: 3045103079
    OutMcastPkts: 2727644667
    InBcastPkts: 16567
    InOctets: 1654553951951
    OutOctets: 351194071831
    InMcastOctets: 1058583515712
    OutMcastOctets: 221466960723
    InBcastOctets: 2639362
    InNoECTPkts: 4603779373
    InECT0Pkts: 30
[solarflar@localhost ~]$ 
    另外, 網絡通訊涉及到繁重的中斷處理。 所以, 經過與 netstat工具相結合, 可使用 vmstat來捕獲中斷數目,使用 sar來肯定中斷處理操做的散佈狀況。

4、nfsstat
    網絡文件系統 (Network File System NFS) 能夠將遠程機器的文件系統與本地文件系統融合起來,即 NFS 使用與本地相同的讀寫接口來遠程訪問數據。 nfsstat 是一個打印 NFS 內核統計信息的簡單工具, 可打印出工做負荷中 NFS API 調用數量。在如下示例中, 服務器運行一個 I/O 工做負荷。來自 nfsstat 的輸出信息顯示的讀寫操做次數,可用
於調試目的。也可根據讀寫操做的次數來進一步理解性能問題
 。
[solarflar@localhost ~]$ nfsstat 
Server rpc stats:
calls      badcalls   badclnt    badauth    xdrcall
0          0          0          0          0 


5、小結

    前面介紹了大量當前可用的 Linux性能工具,包括 CPU工具、 內存工具、 I/O 工具及網絡工具。這些工具能夠提供用於理解在特定工做負荷下系統資源利用狀況的信息。其中一些工具也能夠揭示用戶空間中的系統活動狀況。本章描述了這些工具所提供的數據內容以及如何將其應用於性能分析領域。
    性能分析工做所需的大多數基本工具特性均可經過現有工具提供。可是還須要其餘工具來提供對網絡通訊的更好理解,包括
NUMA 系統中結點間的進程遷移和遠程內存訪問。另外,還須要一些工具可以以多種視圖來存儲和顯示性能數據,以便幫助開發者對內核或用戶應用加以理解、 分析及調優, 例如 gnuplot 工具。 所顯示的數據應該具備各類緊密度以便支持不一樣級別的數據密度, 尤爲是涉及到多線程機器或 SMP 機器, 其中數據經常是複雜且多維的。 性能工具對於推進 Linux 進入企業級系統這個市場具備相當重要的做用。
相關文章
相關標籤/搜索