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

TrumanWong
12/22/2023
TrumanWong

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

例如,执行如下命令,使用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次的平均数据取值,根据实际情况来确定带宽跑满的网卡名称,您可以关注以下几个字段:

iftop命令的使用

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

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

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

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

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

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

$ iftop -i eth0 -P

img

主要字段说明:

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

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

显示结果如下:

img

nethogs监控界面:

s可以按照Sent列进行排序 按r可以按照Received列进行排序 按m可以切换不同的统计单位显示,例如kb/s、kb、b、mb。

监控界面信息说明如下:

结论

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