2593|0

5979

帖子

8

TA的资源

版主

楼主
 

Linux 性能监测:Network [复制链接]

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

  1. # /sbin/ethtool eth0
  2. Settings for eth0:
  3.         Supported ports: [ TP ]
  4.         Supported link modes:   10baseT/Half 10baseT/Full
  5.                                 100baseT/Half 100baseT/Full
  6.                                 1000baseT/Half 1000baseT/Full
  7.         Supports auto-negotiation: Yes
  8.         Advertised link modes:  10baseT/Half 10baseT/Full
  9.                                 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 下:

  1. # /sbin/ethtool -s eth0 speed 1000 duplex full autoneg off
复制代码

iptraf

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

  1. # iptraf -d eth0
复制代码


netperf

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

  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 测试:

  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. 87380  16384  16384    10.32      93.68
复制代码

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

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

  1. # netperf -t TCP_RR -H 172.16.38.36 -l 10 -- -r 2048,32768
  2. 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
  3. Local /Remote
  4. Socket Size   Request  Resp.   Elapsed  Trans.
  5. Send   Recv   Size     Size    Time     Rate         
  6. bytes  Bytes  bytes    bytes   secs.    per sec   

  7. 16384  87380  2048     32768   10.00     243.03   
  8. 16384  87380
复制代码

iperf

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

  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秒对服务器和客户端之间的网络进行一次带宽测试和采样:

  1. # iperf -c 172.16.38.36 -t 30 -i 5
  2. ------------------------------------------------------------
  3. Client connecting to 172.16.38.36, TCP port 5001
  4. TCP window size: 16.0 KByte (default)
  5. ------------------------------------------------------------
  6. [  3] local 172.16.39.100 port 49515 connected with 172.16.38.36 port 5001
  7. [ ID] Interval       Transfer     Bandwidth
  8. [  3]  0.0- 5.0 sec  58.8 MBytes  98.6 Mbits/sec
  9. [ 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 分析其文件格式。这个工具组合可以提供一些难以用其他工具发现的信息:

  1. # /usr/sbin/tcpdump -w network.dmp
  2. tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
  3. 511942 packets captured
  4. 511942 packets received by filter
  5. 0 packets dropped by kernel

  6. # tcptrace network.dmp
  7. 1 arg remaining, starting with 'network.dmp'
  8. Ostermann's tcptrace -- version 6.6.7 -- Thu Nov  4, 2004

  9. 511677 packets seen, 511487 TCP packets traced
  10. elapsed wallclock time: 0:00:00.510291, 1002714 pkts/sec analyzed
  11. trace file elapsed time: 0:02:35.836372
  12. TCP connection info:
  13.   1: zaber:54581 - boulder:111 (a2b)                   6>    5<  (complete)
  14.   2: zaber:833 - boulder:32774 (c2d)                   6>    5<  (complete)
  15.   3: zaber:pcanywherestat - 172.16.39.5:53086 (e2f)    2>    3<
  16.   4: zaber:716 - boulder:2049 (g2h)                  347>  257<
  17.   5: 172.16.39.100:58029 - zaber:12865 (i2j)           7>    5<  (complete)
  18.   6: 172.16.39.100:47592 - zaber:36814 (k2l)        255380> 255378<  (reset)
  19.   7: breakpoint:45510 - zaber:7012 (m2n)               9>    5<  (complete)
  20.   8: zaber:35813 - boulder:111 (o2p)                   6>    5<  (complete)
  21.   9: zaber:837 - boulder:32774 (q2r)                   6>    5<  (complete)
  22. 10: breakpoint:45511 - zaber:7012 (s2t)               9>    5<  (complete)
  23. 11: zaber:59362 - boulder:111 (u2v)                   6>    5<  (complete)
  24. 12: zaber:841 - boulder:32774 (w2x)                   6>    5<  (complete)
  25. 13: breakpoint:45512 - zaber:7012 (y2z)               9>    5<  (complete)
复制代码

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

  1. # tcptrace -f'rexmit_segs>100' network.dmp
复制代码

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

  1. # tcptrace -o10 network.dmp
复制代码

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

  1. # tcptrace -xslice network.dmp

  2. # cat slice.dat
  3. date                segs    bytes  rexsegs rexbytes      new   active
  4. --------------- -------- -------- -------- -------- -------- --------
  5. 16:58:50.244708    85055  4513418        0        0        6        6
  6. 16:59:05.244708   110921  5882896        0        0        0        2
  7. 16:59:20.244708   126107  6697827        0        0        1        3
  8. 16:59:35.244708   151719  8043597        0        0        0        2
  9. 16:59:50.244708    37296  1980557        0        0        0        3
  10. 17:00:05.244708       67     8828        0        0        2        3
  11. 17:00:20.244708      149    22053        0        0        1        2
  12. 17:00:35.244708       30     4080        0        0        0        1
  13. 17:00:50.244708       39     5688        0        0        0        1
  14. 17:01:05.244708       67     8828        0        0        2        3
  15. 17:01:11.081080       37     4121        0        0        1        3
复制代码

此帖出自Linux开发论坛
点赞 关注
个人签名生活就是油盐酱醋再加一点糖,快活就是一天到晚乐呵呵的忙
===================================
做一个简单的人,踏实而务实,不沉溺幻想,不庸人自扰

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表