在生产环境中,我们可能会遇到服务器带宽过高的情况,这会影响到线上服务的性能和稳定性。为了排查定位具体问题,您需要使用一些网络流量监控工具,来分析系统中流量信息的来源、去向、大小、频率等。本文将介绍三种常用的网络流量监控工具: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]
例如,执行如下命令,使用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
命令通常需要手动安装,您可以通过yum
或apt
等包管理工具来安装,也可以从源码编译安装。
# Redhat/CentOS/Fedora
$ sudo yum install iftop
# Ubuntu/Debian
$ sudo apt install iftop
以下是一些常用的 iftop
参数:
执行如下命令,查看详细端口流量占用情况:
$ iftop -i eth0 -P
主要字段说明:
进入iftop
界面后,可以通过按下相应的字母快捷按键,来对显示结果进行调整。常用的快捷按键有:
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。监控界面信息说明如下:
本文介绍了如何使用sar
、iftop
、nethogs
三种网络流量监控工具,来查看Linux
系统中网络流量负载情况。这些工具可以从不同的维度来分析系统中流量信息,快速定位和解决带宽负载过高的问题。