TrumanWong

如何使用sar、iftop、nethogs查看Linux系统网络流量负载情况

TrumanWong
12/22/2023

在生产环境中,我们可能会遇到服务器带宽过高的情况,这会影响到线上服务的性能和稳定性。为了排查定位具体问题,您需要使用一些网络流量监控工具,来分析系统中流量信息的来源、去向、大小、频率等。本文将介绍三种常用的网络流量监控工具:sariftopnethogs,以及它们的安装、使用和结果分析方法。

sar命令的使用

sar(System Activity Reporter系统活动情况报告)是目前Linux上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括CPU、内存、磁盘、网络等。sar可以从网络接口层面来分析数据包的收发情况、错误信息等

sar工具通常已经预装在Linux系统中,您可以通过sar -V命令来检查是否已经安装。如果没有安装,您可以通过yumapt等包管理工具来安装。

# Redhat/CentOS/Fedora
$ sudo yum install sysstat
# Ubuntu/Debian
$ sudo apt install sysstat

使用sar来监控网络流量的常用命令如下:

sar -n DEV [interval] [count]
  • -n DEV表示显示网络接口的统计信息

  • [interva]表示统计间隔

  • [count]表示统计次数。

  • [count]表示统计次数

例如,执行如下命令,使用sar每1秒统计一次网络接口的活动状况,连续统计5次:

$ sar -n DEV 1 5
Linux 6.6.6-200.fc39.x86_64 (localhost.localdomain) 	12/22/2023 	_x86_64_	(4 CPU)

03:26:31 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
03:26:32 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
03:26:32 PM    ens160      2.00      2.00      0.12      0.24      0.00      0.00      0.00      0.00

...

03:26:35 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
03:26:36 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
03:26:36 PM    ens160      2.00      3.00      0.12      0.76      0.00      0.00      0.00      0.00

Average:        IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
Average:           lo     12.00     12.00      0.65      0.65      0.00      0.00      0.00      0.00
Average:       ens160      2.20      2.40      0.14      0.61      0.00      0.00      0.00      0.00

命令执行后会列出每个网卡5次的平均数据取值,根据实际情况来确定带宽跑满的网卡名称,您可以关注以下几个字段:

  • IFACE:网络接口名称
  • rxpck/s:每秒接收的数据包数量
  • txpck/s:每秒发送的数据包数量
  • rxkB/s:每秒接收的数据量(KB)
  • txkB/s:每秒发送的数据量(KB)
  • rxcmp/s:每秒接收的压缩数据包数量
  • txcmp/s:每秒发送的压缩数据包数量
  • rxmcst/s:每秒接收的多播数据包数量

iftop命令的使用

iftop 是一个免费的网卡实时流量监控工具,类似于 top 命令。它可以监控指定网卡的实时流量、端口连接信息以及反向解析 IP 地址。使用 iftop 可以精确显示本机网络流量以及网络内各主机之间的通信流量,非常适合于监控代理服务器或路由器的网络流量。

此工具对于检测流量异常的主机非常有效,通过 iftop 的输出,可以迅速定位主机流量异常的根源,对于网络故障排查和网络安全检测非常有用。

iftop命令通常需要手动安装,您可以通过yumapt等包管理工具来安装,也可以从源码编译安装。

# Redhat/CentOS/Fedora
$ sudo yum install iftop
# Ubuntu/Debian
$ sudo apt install iftop

以下是一些常用的 iftop 参数:

  • -i:指定需要检测的网卡,例如:iftop -i eth0eth1等。如果不通过-i参数指定接口名,则默认检测第一块网卡的使用情况。
  • -B:将输出以字节为单位显示网卡流量(默认是比特)
  • -n:将输出的主机信息都通过 IP 地址显示,不进行 DNS 解析
  • -N:只显示连接端口号,不显示端口对应的服务名称
  • -F:显示特定网段的网卡进出流量,例如:iftop -F 192.168.118.0/24
  • -h:显示帮助和参数信息
  • -P:显示请求端口

执行如下命令,查看详细端口流量占用情况:

$ iftop -i eth0 -P

TrumanWong

主要字段说明:

  • 第一行展示了带宽使用情况。
  • 中间部分:外部连接列表,即记录了哪些IP正在和本机的网络连接。
    • 右侧部分是实时流量信息,分别是该访问IP连接到本机2秒、10秒和40秒的平均流量。
    • =>表示发送数据,<=表示接收数据。
  • 底部。
    • 第一列:TX表示发送流量,RX表示接收流量,TOTAL表示总流量。
    • 第二列cum:表示第一列各种情况的总流量。
    • 第三列peak:表示第一列各种情况的流量峰值。
    • 第四列rates:表示第一列各种情况2秒、10秒、40秒内的平均流量。

进入iftop界面后,可以通过按下相应的字母快捷按键,来对显示结果进行调整。常用的快捷按键有:

  • h:切换是否显示帮助。
  • n:切换显示本机的IP或主机名。
  • s:切换是否显示本机的host信息。
  • d:切换是否显示远端目标主机的host信息。
  • t:切换显示格式为2行、1行、只显示发送流量或只显示接收流量。
  • N:切换显示端口号或端口服务名称。
  • S:切换是否显示本机的端口信息。
  • D:切换是否显示远端目标主机的端口信息。
  • p:切换是否显示端口信息。
  • P:切换暂停或继续显示。
  • b:切换是否显示平均流量图形条。
  • B:切换计算2秒或10秒或40秒内的平均流量。
  • T:切换是否显示每个连接的总流量。
  • l:打开屏幕过滤功能,输入要过滤的字符。比如输入相应IP地址,回车后,屏幕就只显示这个IP相关的流量信息。
  • L:切换显示画面上边的刻度,刻度不同,流量图形条会有变化。
  • jk:向上或向下滚动屏幕显示的连接记录。
  • 123:根据右侧显示的三列流量数据进行排序。
  • <:根据左边的本机名或IP排序。
  • >:根据远端目标主机的主机名或IP排序。
  • o:切换是否固定只显示当前的连接。
  • f:编辑过滤代码。
  • !:调用Shell命令。
  • q:退出。

nethogs命令的使用

nethogs是一款开源的网络流量监控工具,可用于显示每个进程的带宽占用情况。这样可以更直观定位异常流量的来源。nethogs支持IPv4IPv6协议,支持本地网卡及PPP连接。

nethogs命令通常需要手动安装,您可以通过yumapt等包管理工具来安装,也可以从源码编译安装:

# Redhat/CentOS/Fedora
$ sudo yum install nethogs
# Ubuntu/Debian
$ sudo apt install nethogs

nethogs参数说明:

usage: nethogs [-V] [-h] [-b] [-d seconds] [-v mode] [-c count] [-t] [-p] [-s] [device [device [device ...]]]
  -V : 打印版本。
  -h : 打印此帮助。
  -b : bughunt模式 - 暗示tracemode。
  -d : 监控间隔时间(以秒为单位)。 默认值为1。可以通过-d参数来设定监控间隔。例如执行如下nethogs eth0 -d 3命令,设定监控间隔为3秒。
  -v : 视图模式(0 = KB / s,1 =总KB,2 =总B,3 =总MB)。 默认值为0。
  -c : 更新次数。 默认为0(无限制)。
  -t : tracemode.
  -p : 煽动混乱模式(不推荐)。
  -s : 按发送列排序输出。
  -a : 监控所有设备,甚至环回/停止。
  device : 要监控的设备。 默认是所有接口启动和运行,不包括环回

当nethogs运行时,按:
  q:退出
  s:按SENT流量排序
  r:按RECEIVE流量排序
  m:在总(KB,B,MB)和KB / s模式之间切换

nethogs常用命令如下:

nethogs -d interval interface

其中,-d interval表示设定监控间隔,interface表示指定要监控的网络接口名,比如eth0eth1等。如果不通过-i参数指定接口名,则默认检测第一块网卡的使用情况。

执行如下命令,查看网卡上各进程的流量信息:

$ nethogs eth0

显示结果如下:

TrumanWong

nethogs监控界面:

s可以按照Sent列进行排序

r可以按照Received列进行排序

m可以切换不同的统计单位显示,例如kb/s、kb、b、mb。

监控界面信息说明如下:

  • PID:进程ID
  • USER:进程所属用户
  • PROGRAM:进程名称
  • DEV:网络接口
  • SENT:发送流量
  • RECEIVED:接收流量

结论

本文介绍了如何使用sariftopnethogs三种网络流量监控工具,来查看Linux系统中网络流量负载情况。这些工具可以从不同的维度来分析系统中流量信息,快速定位和解决带宽负载过高的问题。