在生产环境中,我们可能会遇到服务器带宽过高的情况,这会影响到线上服务的性能和稳定性。为了排查定位具体问题,您需要使用一些网络流量监控工具,来分析系统中流量信息的来源、去向、大小、频率等。本文将介绍三种常用的网络流量监控工具:sar
、iftop
、nethogs
,以及它们的安装、使用和结果分析方法。
sar
命令的使用sar
(System Activity Reporter
系统活动情况报告)是目前Linux
上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括CPU
、内存、磁盘、网络等。sar
可以从网络接口层面来分析数据包的收发情况、错误信息等
sar
工具通常已经预装在Linux
系统中,您可以通过sar -V
命令来检查是否已经安装。如果没有安装,您可以通过yum
或apt
等包管理工具来安装。
# 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
命令通常需要手动安装,您可以通过yum
或apt
等包管理工具来安装,也可以从源码编译安装。
# Redhat/CentOS/Fedora
$ sudo yum install iftop
# Ubuntu/Debian
$ sudo apt install iftop
以下是一些常用的 iftop
参数:
-i
:指定需要检测的网卡,例如:iftop -i eth0
、eth1
等。如果不通过-i
参数指定接口名,则默认检测第一块网卡的使用情况。-B
:将输出以字节为单位显示网卡流量(默认是比特)-n
:将输出的主机信息都通过 IP 地址显示,不进行 DNS 解析-N
:只显示连接端口号,不显示端口对应的服务名称-F
:显示特定网段的网卡进出流量,例如:iftop -F 192.168.118.0/24
-h
:显示帮助和参数信息-P
:显示请求端口执行如下命令,查看详细端口流量占用情况:
$ iftop -i eth0 -P
主要字段说明:
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
:切换显示画面上边的刻度,刻度不同,流量图形条会有变化。j
或k
:向上或向下滚动屏幕显示的连接记录。1
或2
或3
:根据右侧显示的三列流量数据进行排序。<
:根据左边的本机名或IP排序。>
:根据远端目标主机的主机名或IP排序。o
:切换是否固定只显示当前的连接。f
:编辑过滤代码。!
:调用Shell命令。q
:退出。nethogs
命令的使用nethogs
是一款开源的网络流量监控工具,可用于显示每个进程的带宽占用情况。这样可以更直观定位异常流量的来源。nethogs
支持IPv4
和IPv6
协议,支持本地网卡及PPP
连接。
nethogs
命令通常需要手动安装,您可以通过yum
或apt
等包管理工具来安装,也可以从源码编译安装:
# 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
表示指定要监控的网络接口名,比如eth0
、eth1
等。如果不通过-i
参数指定接口名,则默认检测第一块网卡的使用情况。
执行如下命令,查看网卡上各进程的流量信息:
$ nethogs eth0
显示结果如下:
在nethogs
监控界面:
按
s
可以按照Sent
列进行排序按
r
可以按照Received
列进行排序按
m
可以切换不同的统计单位显示,例如kb/s、kb、b、mb。
监控界面信息说明如下:
PID
:进程ID
USER
:进程所属用户PROGRAM
:进程名称DEV
:网络接口SENT
:发送流量RECEIVED
:接收流量本文介绍了如何使用sar
、iftop
、nethogs
三种网络流量监控工具,来查看Linux
系统中网络流量负载情况。这些工具可以从不同的维度来分析系统中流量信息,快速定位和解决带宽负载过高的问题。