Linux 性能监测:Network

原文链接:http://linux.cn/thread/11270/1/1/

网络的监测是所有 Linux 子系统里面最复杂的,有太多的因素在里面,比如:延迟、阻塞、冲突、丢包等,更糟的是与 Linux 主机相连的路由器、交换机、无线信号都会影响到整体网络并且很难判断是因为 Linux 网络子系统的问题还是别的设备的问题,增加了监测和判断的复杂度。现在我们使用的所有网卡都称为自适应网卡,意思是说能根据网络上的不同网络设备导致的不同网络速度和工作模式进行自动调整。我们可以通过 ethtool 工具来查看网卡的配置和工作模式:

·········10········20········30········40········50········60········
01. # /sbin/ethtool eth0
02. Settings for eth0:
03. Supported ports: [ TP ]
04. Supported link modes:   10baseT/Half 10baseT/Full
05. 100baseT/Half 100baseT/Full
06. 1000baseT/Half 1000baseT/Full
07. Supports auto-negotiation: Yes
08. Advertised link modes:  10baseT/Half 10baseT/Full
09. 100baseT/Half 100baseT/Full
10. 1000baseT/Half 1000baseT/Full
11. Advertised auto-negotiation: Yes
12. Speed: 100Mb/s
13. Duplex: Full
14. Port: Twisted Pair
15. PHYAD: 1
16. Transceiver: internal
17. Auto-negotiation: on
18. Supports Wake-on: g
19. Wake-on: g
20. Current message level: 0x000000ff (255)
21. Link detected: yes

上面给出的例子说明网卡有 10baseT,100baseT 和 1000baseT 三种选择,目前正自适应为 100baseT(Speed: 100Mb/s)。可以通过 ethtool 工具强制网卡工作在 1000baseT 下:

·········10········20········30········40········50········60········
1. # /sbin/ethtool -s eth0 speed 1000 duplex full autoneg off

iptraf

两台主机之间有网线(或无线)、路由器、交换机等设备,测试两台主机之间的网络性能的一个办法就是在这两个系统之间互发数据并统计结果,看看吞吐量、延迟、速率如何。iptraf 就是一个很好的查看本机网络吞吐量的好工具,支持文字图形界面,很直观。下面图片显示在 100 mbps 速率的网络下这个 Linux 系统的发送传输率有点慢,Outgoing rates 只有 66 mbps.

·········10········20········30········40········50········60········
1. # iptraf -d eth0

linux system performance monitoring: network

 

netperf

netperf 运行在 client/server 模式下,比 iptraf 能更多样化的测试终端的吞吐量。先在服务器端启动 netserver:

·········10········20········30········40········50········60········
1. # netserver
2. Starting netserver at port 12865
3. Starting netserver at hostname 0.0.0.0 port 12865 and family AF_UNSPEC

然后在客户端测试服务器,执行一次持续10秒的 TCP 测试:

·········10········20········30········40········50········60········
1. # netperf -H 172.16.38.36 -l 10
2. TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 172.16.38.36 (172.16.38.36) port 0 AF_INET
3. Recv   Send    Send                         
4. Socket Socket  Message  Elapsed             
5. Size   Size    Size     Time     Throughput 
6. bytes  bytes   bytes    secs.    10^6bits/sec 
7.  
8. 87380  16384  16384    10.32      93.68

从以上输出可以看出,网络吞吐量在 94mbps 左右,对于 100mbps 的网络来说这个性能算的上很不错。上面的测试是在服务器和客户端位于同一个局域网,并且局域网是有线网的情况,你也可以试试不同结构、不同速率的网络,比如:网络之间中间多几个路由器、客户端在 wi-fi、VPN 等情况。

netperf 还可以通过建立一个 TCP 连接并顺序地发送数据包来测试每秒有多少 TCP 请求和响应。下面的输出显示在 TCP requests 使用 2K 大小,responses 使用 32K 的情况下处理速率为每秒243:

·········10········20········30········40········50········60········
01. # netperf -t TCP_RR -H 172.16.38.36 -l 10 -- -r 2048,32768
02. TCP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 172.16.38.36 (172.16.38.36) port 0 AF_INET
03. Local /Remote
04. Socket Size   Request  Resp.   Elapsed  Trans.
05. Send   Recv   Size     Size    Time     Rate        
06. bytes  Bytes  bytes    bytes   secs.    per sec  
07.  
08. 16384  87380  2048     32768   10.00     243.03  
09. 16384  87380

iperf

iperf 和 netperf 运行方式类似,也是 server/client 模式,先在服务器端启动 iperf:

·········10········20········30········40········50········60········
1. # iperf -s -D
2. ------------------------------------------------------------
3. Server listening on TCP port 5001
4. TCP window size: 85.3 KByte (default)
5. ------------------------------------------------------------
6. Running Iperf Server as a daemon
7. The Iperf daemon process ID : 5695

然后在客户端对服务器进行测试,客户端先连接到服务器端(172.16.38.36),并在30秒内每隔5秒对服务器和客户端之间的网络进行一次带宽测试和采样:

·········10········20········30········40········50········60········
01. # iperf -c 172.16.38.36 -t 30 -i 5
02. ------------------------------------------------------------
03. Client connecting to 172.16.38.36, TCP port 5001
04. TCP window size: 16.0 KByte (default)
05. ------------------------------------------------------------
06. [  3] local 172.16.39.100 port 49515 connected with 172.16.38.36 port 5001
07. [ ID] Interval       Transfer     Bandwidth
08. [  3]  0.0- 5.0 sec  58.8 MBytes  98.6 Mbits/sec
09. [ ID] Interval       Transfer     Bandwidth
10. [  3]  5.0-10.0 sec  55.0 MBytes  92.3 Mbits/sec
11. [ ID] Interval       Transfer     Bandwidth
12. [  3] 10.0-15.0 sec  55.1 MBytes  92.4 Mbits/sec
13. [ ID] Interval       Transfer     Bandwidth
14. [  3] 15.0-20.0 sec  55.9 MBytes  93.8 Mbits/sec
15. [ ID] Interval       Transfer     Bandwidth
16. [  3] 20.0-25.0 sec  55.4 MBytes  92.9 Mbits/sec
17. [ ID] Interval       Transfer     Bandwidth
18. [  3] 25.0-30.0 sec  55.3 MBytes  92.8 Mbits/sec
19. [ ID] Interval       Transfer     Bandwidth
20. [  3]  0.0-30.0 sec    335 MBytes  93.7 Mbits/sec

tcpdump 和 tcptrace

tcmdump 和 tcptrace 提供了一种更细致的分析方法,先用 tcpdump 按要求捕获数据包把结果输出到某一文件,然后再用 tcptrace 分析其文件格式。这个工具组合可以提供一些难以用其他工具发现的信息:

·········10········20········30········40········50········60········
01. # /usr/sbin/tcpdump -w network.dmp
02. tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
03. 511942 packets captured
04. 511942 packets received by filter
05. 0 packets dropped by kernel
06.  
07. # tcptrace network.dmp
08. 1 arg remaining, starting with 'network.dmp'
09. Ostermann's tcptrace -- version 6.6.7 -- Thu Nov  4, 2004
10.  
11. 511677 packets seen, 511487 TCP packets traced
12. elapsed wallclock time: 0:00:00.510291, 1002714 pkts/sec analyzed
13. trace file elapsed time: 0:02:35.836372
14. TCP connection info:
15. 1: zaber:54581 - boulder:111 (a2b)                   6>    5<  (complete)
16. 2: zaber:833 - boulder:32774 (c2d)                   6>    5<  (complete)
17. 3: zaber:pcanywherestat - 172.16.39.5:53086 (e2f)    2>    3<
18. 4: zaber:716 - boulder:2049 (g2h)                  347>  257<
19. 5: 172.16.39.100:58029 - zaber:12865 (i2j)           7>    5<  (complete)
20. 6: 172.16.39.100:47592 - zaber:36814 (k2l)        255380> 255378<  (reset)
21. 7: breakpoint:45510 - zaber:7012 (m2n)               9>    5<  (complete)
22. 8: zaber:35813 - boulder:111 (o2p)                   6>    5<  (complete)
23. 9: zaber:837 - boulder:32774 (q2r)                   6>    5<  (complete)
24. 10: breakpoint:45511 - zaber:7012 (s2t)               9>    5<  (complete)
25. 11: zaber:59362 - boulder:111 (u2v)                   6>    5<  (complete)
26. 12: zaber:841 - boulder:32774 (w2x)                   6>    5<  (complete)
27. 13: breakpoint:45512 - zaber:7012 (y2z)               9>    5<  (complete)

tcptrace 功能很强大,还可以通过过滤和布尔表达式来找出有问题的连接,比如,找出转播大于100 segments 的连接:

·········10········20········30········40········50········60········
1. # tcptrace -f'rexmit_segs>100' network.dmp

如果发现连接 #10 有问题,可以查看关于这个连接的其他信息:

·········10········20········30········40········50········60········
1. # tcptrace -o10 network.dmp

下面的命令使用 tcptrace 的 slice 模式,程序自动在当前目录创建了一个 slice.dat 文件,这个文件包含了每隔15秒的转播信息:

·········10········20········30········40········50········60········
01. # tcptrace -xslice network.dmp
02.  
03. # cat slice.dat
04. date                segs    bytes  rexsegs rexbytes      new   active
05. --------------- -------- -------- -------- -------- -------- --------
06. 16:58:50.244708    85055  4513418        0        0        6        6
07. 16:59:05.244708   110921  5882896        0        0        0        2
08. 16:59:20.244708   126107  6697827        0        0        1        3
09. 16:59:35.244708   151719  8043597        0        0        0        2
10. 16:59:50.244708    37296  1980557        0        0        0        3
11. 17:00:05.244708       67     8828        0        0        2        3
12. 17:00:20.244708      149    22053        0        0        1        2
13. 17:00:35.244708       30     4080        0        0        0        1
14. 17:00:50.244708       39     5688        0        0        0        1
15. 17:01:05.244708       67     8828        0        0        2        3
16. 17:01:11.081080       37     4121        0        0        1        3

via http://www.vpsee.com/2009/11/linux-system-performance-monitoring-network/


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值