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

linux system performance monitoring: network

 

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.  
  8. 87380 16384 16384 10.32 93.68

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

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.  
  8. 16384 87380 2048 32768 10.00 243.03
  9. 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.  
  7. # tcptrace network.dmp
  8. 1 arg remaining, starting with 'network.dmp'
  9. 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 的连接:


  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.  
  3. # cat slice.dat
  4. date segs bytes rexsegs rexbytes new active
  5. --------------- -------- -------- -------- -------- -------- --------
  6. 16:58:50.244708 85055 4513418 0 0 6 6
  7. 16:59:05.244708 110921 5882896 0 0 0 2
  8. 16:59:20.244708 126107 6697827 0 0 1 3
  9. 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

 原文发布时间为:2013-08-11

本文来自合作伙伴“Linux中国”

时间: 2024-09-15 01:16:11

Linux 性能监测:Network的相关文章

Linux 性能监测:IO

磁盘通常是计算机最慢的子系统,也是最容易出现性能瓶颈的地方,因为磁盘离 CPU 距离最远而且 CPU 访问磁盘要涉及到机械操作,比如转轴.寻轨等.访问硬盘和访问内存之间的速度差别是以数量级来计算的,就像1天和1分钟的差别一样.要监测 IO 性能,有必要了解一下基本原理和 Linux 是如何处理硬盘和内存之间的 IO 的. 内存页 上一篇 Linux 性能监测:Memory 提到了内存和硬盘之间的 IO 是以页为单位来进行的,在 Linux 系统上1页的大小为 4K.可以用以下命令查看系统默认的页

pyDash:一个基于 web 的 Linux 性能监测工具

pyDash 是一个轻量且基于 web 的 Linux 性能监测工具,它是用 Python 和 Django 加上 Chart.js 来写的.经测试,在下面这些主流 Linux 发行版上可运行:CentOS.Fedora.Ubuntu.Debian.Raspbian 以及 Pidora . 你可以使用这个工具来监视你的 Linux 个人电脑/服务器资源,比如 CPU.内存.网络统计,包括在线用户的进程以及更多.仪表盘完全由主要的 Python 发行版本所提供的 Python 库开发,因此它的依赖

Linux 性能监测:CPU

CPU 的占用主要取决于什么样的资源正在 CPU 上面运行,比如拷贝一个文件通常占用较少 CPU,因为大部分工作是由 DMA(Direct Memory Access)完成,只是在完成拷贝以后给一个中断让 CPU 知道拷贝已经完成:科学计算通常占用较多的 CPU,大部分计算工作都需要在 CPU 上完成,内存.硬盘等子系统只做暂时的数据存储工作. 要想监测和理解 CPU 的性能需要知道一些的操作系统的基本知识,比如:中断.进程调度.进程上下文切换.可运行队列等.这里 VPSee 用个例子来简单介绍

Linux 性能监测:Memory

这里的讲到的 "内存" 包括物理内存和虚拟内存,虚拟内存(Virtual Memory)把计算机的内存空间扩展到硬盘,物理内存(RAM)和硬盘的一部分空间(SWAP)组合在一起作为虚拟内存为计算机提供了一个连贯的虚拟内存空间,好处是我们拥有的内存 "变多了",可以运行更多.更大的程序,坏处是把部分硬盘当内存用整体性能受到影响,硬盘读写速度要比内存慢几个数量级,并且 RAM 和 SWAP 之间的交换增加了系统的负担. 在操作系统里,虚拟内存被分成页,在 x86 系统上

Linux 性能监测:介绍

看了某某教程.读了某某手册,按照要求改改某某设置.系统设定.内核参数就认为做到系统优化的想法很傻很天真:)系统优化是一项复杂.繁琐.长期的工作,优化前需要监测.采集.测试.评估,优化后也需要测试.采集.评估.监测,而且是一个长期和持续的过程,不是说现在优化了,测试了,以后就可以一劳永逸了,也不是说书本上的优化就适合眼下正在运行的系统,不同的系统.不同的硬件.不同的应用优化的重点也不同.优化的方法也不同.优化的参数也不同.性能监测是系统优化过程中重要的一环,如果没有监测.不清楚性能瓶颈在哪里,优化

Linux 性能监测工具

一个完整运行的 Linux 系统包括很多子系统(介绍,CPU,Memory,IO,Network,-),监测和评估这些子系统是性能监测的一部分.我们往往需要宏观的看整个系统状态,也需要微观的看每个子系统的运行情况. 幸运的是,我们不必重复造轮子,监控这些子系统都有相应的工具可用,这些经过时间考验.随 Unix 成长起来.简单而优雅的小工具是我们日常 Unix/Linux 工作不可缺少的部分. 下面这张图片很好的总结了 Linux 各个子系统以及监控这些子系统所需要的工具,如果你对 Linux 系

Linux性能监测工具

sysstat   The sysstat package contains utilities to monitor system performance and usage activity. Sysstat contains various utilities, common to many commercial Unixes, and tools you can schedule via cron to collect and historize performance and acti

8个Linux命令行性能监测工具

对每个系统/网络管理员来说,每天监测Linux系统性能是一项非常艰巨的任务.在IT业从事5年的Linux系统管理员后,我发现监控和保持系统正常运行真不是件容易的事,为此,我总结了8个非常实用的命令行工具给Linux/Unix系统管理员.这些命令支持所有的Linux系统,不仅可以用于监控系统,还可以发现导致性能问题的原因所在.下面提供的8个命令足够你选择其中一个用于你的场景中. 1.TOP--Linux进程监控 Linux的top命令是一个性能监视程序,许多Linux系统管理员经常使用它来监测系统

Linux性能分析工具汇总合集

出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章.本文也可以作为检验基础知识的指标,另外文章涵盖了一个系统的方方面面.如果没有完善的计算机系统知识,网络知识和操作系统知识,文档中的工具,是不可能完全掌握的,另外对系统性能分析和优化是一个长期的系列. 本文档主要是结合Linux 大牛,Netflix 高级性能架构师 Brendan Gregg 更新 Linux 性能调优工具的博文,搜集Linux系统性能优化相关文章整理后的一篇综合性文章,主要是结合博文对涉及到的原理和性