Linux中提供了许多有助于评估各种 Linux网络性能的监视工具,其中一些监视工具也可用于解决网络问题以及监视性能。 Linux内核为用户提供了大量的网络系统信息,这有助于监视网络的健康状态并检测在配置、运行期间以及性能方面出现的问题。

下面分析在大多数 Linux主要发行版本中提供的一些网络工具,包括 netstat、nfsstat、 tcpdump、 ethtool、 snmp、 ifport、 ifconfig、 route、 arp、 ping、 traceroute、 host以及nslookup等 。

系统和网络管理员每天都会使用其中的某些工具。诸如 ping、 route、 arp、 traceroute、ethtool及 tcpdump之类的工具常用于判定网络问题。 这些工具描述如下:

  • ping ipaddress/hostname 命令可以显示计算机是否正在运行以及网络连接是否正常。该命令使用互联网控制消息协议(Internet Control Message Protocol, ICMP)中的Echo功能。 该命令通过网络将一个小型报文发至指定的 IP地址。 如果可以收到该报文的应答消息, 则表明这条计算机网络连接是存活的。该命令还可以显示出
    在源计算机和目的计算机之间存在着多少个中间跳数。
  • route 命令可以显示路由表内容,在路由表中增删路由,以及清空所有的路由信息。如果ping命令不起作用,即网络连接没有激活,那么可以使用 arp命令来确定问题根源。该命令的-a选项可以确定硬件地址是否正确地关联到适当的系统上,其他可用的选项包括清空arp缓存、向 arp缓存中添加信息等 。
  • ifconfig 可以确定主机的介质访问控制地址。如果网络上存在着另一台具有相同 IP地址的主机,则该主机的介质访问控制地址可能已存在于本机的 arp缓存中。在这种情况下, 可以使用 arp命令来删除缓存中保存的地址并将正确的地址添加到arp缓存中。
  • traceroute 可以跟踪报文的某条路由路径。 当报文在网络中传输时, 该命令能够测量报文在每一跳(路由器)之间传输所用的时间,并标识出每一跳的地址。
  •  ethtool 可以查询并修改以太网设备的设置参数。每个设备都被分配一个标识编号,例如对于系统中的 n个以太网设备,其编号为 eth0、 eth1…ethn。 ethtool工具使用这种设备名称来查询/修改设置信息。
  • 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)等 。

一、网络统计信息

netstat是监视 Linux服务器上网络连接的最常用工具之一。该工具可以显示每种网络协议例如 TCP和 UDP的活跃 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 socket, UNIX域套接字);

    第 2列和第 3列显示了在 socket接收和发送队列中当前存在的数据字节数;
    后面各列显示了本地和远程地址及端口信息;最后一列显示了 socket当前的协议状态。
    如果 netstat 命令未携带标志-n 的话,则 IP 地址通常转换成主机名(nethostA、nethostB)。
    如果只要显示特定地址系列的内容,可以在命令中提供相应的标志。 例如, netstat –tcp或-t只显示前TCPsocket关于各个地址系列的完整标志列表参见netstat的man命令帮助。
    星号(*)表示通配符, 在指代本地地址时通常是监听所有本地接口的监听进程。 当该socket向远程主机发起连接并进入已建立(established)状态时,会显示出远程主机地址和端口信息。

二、接口信息

    Netstat给出的接口信息与 ifconfig命令所显示的内容相同。该信息是接口所提供的统计信息列表。 这些信息包括最大传输单元(maximum transmission unit、 MTU),以及接收和发送报文中传输成功的、通过某种方式出错的、丢弃的或溢出的报文数。
[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

三、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来确定中断处理操作的散布情况。

四、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

五、小结

前面介绍了大量当前可用的 Linux性能工具,包括 CPU工具、 内存工具、 I/O工具及网络工具。这些工具可以提供用于理解在特定工作负荷下系统资源利用情况的信息。其中一些工具也可以揭示用户空间中的系统活动情况。本章描述了这些工具所提供的数据内容以及如何将其应用于性能分析领域。
    性能分析工作所需的大多数基本工具特性都可通过现有工具提供。但是还需要其他工具来提供对网络通信的更好理解,包括 NUMA系统中结点间的进程迁移和远程内存访问。另外,还需要一些工具能够以多种视图来存储和显示性能数据,以便帮助开发者对内核或用户应用加以理解、 分析及调优, 例如 gnuplot工具。 所显示的数据应该具有各种紧密度以便支持不同级别的数据密度, 尤其是涉及到多线程机器或 SMP机器, 其中数据常常是复杂且多维的。 性能工具对于推动 Linux进入企业级系统这个市场具有至关重要的作用。

linux系统性能监控--网络利用率的更多相关文章

  1. linux系统性能监控--CPU利用率

    在对系统的方法化分析中,首要且最基本的工具之一常常是对系统的 CPU利用率进行简单测量. Linux以及大多数基于 UNIX的操作系统都提供了一条命令来显示系统的平均负荷(loadaverage) . ...

  2. linux系统性能监控--内存利用率

    Linux提供了对物理内存进行合理.高效的访问并可以访问潜在的海量虚存的技术.虚存通常稍多于操作系统实际拥有的内存容量,以便将较少使用的数据卸载到磁盘存储器上,同时又呈现出系统拥有大量物理内存的假象. ...

  3. Linux 系统性能监控命令详解

    Linux 系统性能监控命令详解 CPU MEMORY IO NETWORK LINUX进程内存占用查看方法 系统负载过重时往往会引起其它子系统的问题,比如:->大量的读入内存的IO请求(pag ...

  4. linux系统性能监控--I/O利用率

    尽管整体的处理器速度. 内存大小以及 I/O执行速度在不断提高,但 I/O操作的吞吐率和延迟性能仍然要比等价的内存访问操作低多个数量级.另外,由于许多工作负荷都拥有重要的I/O组件,I/O处理很容易成 ...

  5. Linux系统性能监控

    系统的性能指标主要包括CPU.内存.磁盘I/O.网络几个方面. 1. CPU性能 (1)利用vmstat命令监控系统CPU 该命令可以显示关于系统各种资源之间相关性能的简要信息,这里我们主要用它来看C ...

  6. linux系统性能监控常用命令

      一.Linux服务器性能关注点 1)CPU -> load:表示cpu在一段时间内正在处理以及等待处理的任务之和统计信息,简单可理解为cpu正处理的线程数和能同时处理的线程数的比值.一般认为 ...

  7. Linux系统性能监控之6个vmstat和6个iostat命令

    这篇文章主要介绍一些Linux性能检测相关的命令. vmstat和iostat的两个命令可以运行在主流的Linux/Unix操作系统上. 如果vmstat和iostat命令不能再你的电脑上运行,请安装 ...

  8. 监控Linux系统性能的工具--nmon(一)

    今天看到一资料上写着,nmon可以对linux系统进行性能监控,随手在自己的阿里云上敲了一下这个命令,提示'command not find' 一脸懵~,然后探索了一下如何安装这个工具以及如何更好的查 ...

  9. 20个命令行工具监控Linux系统性能

    作为Linux/Unix 系统管理员需要掌握一些常用的工具用于检测系统性能.在这里,dodo为大家推荐非常20个有用的并且最常用的命令行系统监视工具: 1. top -Linux系统进程监控 top ...

随机推荐

  1. 南阳OJ-2-括号配对问题---栈的应用

    题目链接: http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=2 题目大意: 有一行括号序列,请你检查这行括号是否配对. 思路: 直接用栈来模拟 ...

  2. html标记语言 --框架

    html标记语言 --框架 六.框架 1.什么是框架 框架将浏览器划分成不同的部分,每一部分加载不同的网页 实现同一浏览器窗口中加载多个页面的效果. 语法格式<frameset>..... ...

  3. 用js来实现那些数据结构05(栈02-栈的应用)

    上一篇文章我们一起实现了栈,那么这一篇文章我们一起来用栈解决问题.看看如何用栈来解决进制转换,平衡圆括号以及汉诺塔问题,使我们对栈有更为深入的理解. 1.进制转换 我们先来看看十进制如何转换成二进制, ...

  4. mysql乱码配置

    1.进入mysql   show variables like "char%"   2.在/etc/mysql/my.cnf中增加以下内容   [client] default-c ...

  5. [LeetCode] Path Sum IV 二叉树的路径和之四

    If the depth of a tree is smaller than 5, then this tree can be represented by a list of three-digit ...

  6. Struts2--拦截器Interceptor

    拦截器是的我们可以在方法的执行前后定义执行的操作.可以作为一个非常有力的工具在数据验证,属性设置,安全,日志等等方面. 拦截器可以链接起来形成一个拦截器栈.框架会按照拦截器定义的顺序依次调用这些拦截器 ...

  7. [Cqoi2010]扑克牌

    Description 你有n种牌,第i种牌的数目为ci.另外有一种特殊的 牌:joker,它的数目是m.你可以用每种牌各一张来组成一套牌,也可以用一张joker和除了某一种牌以外的其他牌各一张组成1 ...

  8. ●2301 [HAOI2011] Problem b

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2301 题解: 莫比乌斯反演,入门题. 类似●HDU 1695 GCD 只是多了一个下界,(另 ...

  9. hdu 5445 多重背包

    Food Problem Time Limit: 3000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)To ...

  10. 【USACO Mar08】 奶牛跑步 A-star k短路

    Description Bessie准备用从牛棚跑到池塘的方法来锻炼. 但是因为她懒,她只准备沿着下坡的路跑到池塘,然后走回牛棚. Bessie也不想跑得太远,所以她想走最短的路经. 农场上一共有M( ...