参考文章 Linux服务器上监控网络带宽的18个常用命令和linux带宽流量监控查看工具。
注:不想看具体命令的内容,直接跳到最底部的总结,去选一个合适自己的命令去使用即可,已经总结了如何选择命令。
简述
这些工具使用不同的机制来制作流量报告。nload等一些工具可以读取"proc/net/dev"文件,以获得流量统计信息;
而一些工具使用pcap库来捕获所有数据包,然后计算总数据量,从而估计流量负载。
下面是按功能划分的命令名称。
- 1)监控总体带宽使用――nload、bmon、slurm、bwm-ng、cbm、speedometer和netload。
- 2)监控总体带宽使用(批量式输出)――vnstat、ifstat、dstat和collectl。
- 3)每个套接字连接的带宽使用――iftop、iptraf、tcptrack、pktstat、netwatch和trafshow。
- 4)每个进程的带宽使用――nethogs。
一 Linux服务器上监控网络带宽的18个常用命令和linux带宽流量监控查看工具
1. nload
nload是一个命令行工具,让用户可以分开来监控入站流量和出站流量。它还可以绘制图表以显示入站流量和出站流量,视图比例可以调整。用起来很简单,不支持许多选项。
所以,如果你只需要快速查看总带宽使用情况,无需每个进程的详细情况,那么nload用起来很方便。
安装nload:Fedora和Ubuntu在默认软件库里面就有nload。CentOS用户则需要从Epel软件库获得nload。
# fedora或centos
$ yum install nload -y
# ubuntu/debian
$ sudo apt-get install nload
使用:
# 直接输入命令即可
$ nload
效果:
解释一下下图,左下角代表对应的网卡,例如这里共有6个,按下enter可以切换网卡。
Incoming代表输入服务器的流量,Outgoing代表输出。以Incoming为例,Curr代表当前的总带宽流量的使用情况,Avg是一定时间段的平均带宽;Min则代表某时刻最小带宽值;Max代表某时刻最大带宽值;Ttl不需要理会,可能是一些统计而已,想知道的可自行百度查看该参数。
所以,若想看某台服务器的总体带宽使用,使用nload是很好的选择,个人平时也经常使用,并且留意一些,下面的#符合还能组成峰值形状。
2. iftop
iftop可测量通过每一个套接字连接传输的数据;它采用的工作方式有别于nload。iftop使用pcap库来捕获进出网络适配器的数据包,然后汇总数据包大小和数量,搞清楚总的带宽使用情况。
虽然iftop报告每个连接所使用的带宽,但它无法报告参与某个套按字连接的进程名称/编号(ID)。不过由于基于pcap库,iftop能够过滤流量,并报告由过滤器指定的所选定主机连接的带宽使用情况。
安装iftop:Ubuntu/Debian/Fedora用户可以从默认软件库获得它。CentOS用户可以从Epel获得它。
# fedora或centos
$ yum install iftop -y
# ubuntu或 debian
$ sudo apt-get install iftop
使用:
$ iftop -n
n选项可以防止iftop将IP地址解析成主机名,解析本身就会带来额外的网络流量。
效果:
界面上面显示的是类似刻度尺的刻度范围,为显示流量图形的长条作标尺用的。
中间的<= =>这两个左右箭头,表示的是流量的方向,<= =>两边是收发各自的ip。
TX:发送流量。
RX:接收流量。
TOTAL:总流量。
Cumm:运行iftop到目前时间的总流量。
peak:流量峰值。
rates:分别表示过去 2s 10s 40s 的平均流量。
看图技巧,所以实际上我们只需要查看TOTAL那一行即可,并且主要看rates的描述。
3. iptraf
iptraf是一款交互式、色彩鲜艳的IP局域网监控工具。它可以显示每个连接以及主机之间传输的数据量。
安装:
# Centos(基本软件库)
$ yum install iptraf
# fedora或centos(带epel)
$ yum install iptraf-ng -y
# ubuntu或debian
$ sudo apt-get install iptraf iptraf-ng
运行:
# 可能是这个 sudo iptraf,看服务器apt下来的版本,
$ sudo iptraf-ng
效果:
首先选择Ip traffic monitor监控,然后选择All interfaces所有网口,即可去到第3个图画面。
解释该图:
第一列是与本机进行TCP连接的ip和port的程序;第2列是双方的通信包个数;第3列是开启iptraf后,双方通信的字节数;第4列未知;第5列是网口名字。
而下面红色的字体是动态的tcp连接信息,例如ip1 to ip2 on 网口。
实际上我也不怎么用这个命令,不太熟,具体可以自行单独百度这个命令的参数意思。
4. nethogs
nethogs是一款小巧的"net top"工具,可以显示每个进程所使用的带宽,并对列表排序,将耗用带宽最多的进程排在最上面。万一出现带宽使用突然激增的情况,用户迅速打开nethogs,就可以找到导致带宽使用激增的进程。nethogs可以报告程序的进程编号(PID)、用户和路径。
安装nethogs:Ubuntu、Debian和Fedora用户可以从默认软件库获得。CentOS用户则需要Epel。
# ubuntu或debian(默认软件库)
$ sudo apt-get install nethogs
# fedora或centos(来自epel)
$ yum install nethogs -y
运行:
$ sudo nethogs
效果:
PID列代表进程pid,USER代表所属用户,PROGRAM代表可执行程序执行的路径,DEV代表网卡,SENT代表发送速率,RECEIVED代表接收速率。
TOTAL代表总发送总接收,单位都是kb/s。
对于查看某个进程是否占用高带宽,nethogs是个不错的选择。
5. bmon
bmon(带宽监控器)是一款类似nload的工具,它可以显示系统上所有网络接口的流量负载。输出结果还含有图表和剖面,附有数据包层面的详细信息。
安装bmon:Ubuntu、Debian和Fedora用户可以从默认软件库来安装。CentOS用户则需要安装repoforge,因为Epel里面没有bmon。
# ubuntu或debian
$ sudo apt-get install bmon
# fedora或centos(来自repoforge)
$ sudo yum install bmon
运行:
$ sudo bmon
效果:
左上方按上下左右可以选择网卡,这里选择的是eno1。然后就会在右边显示该网卡的信息,整个红色框都是,不过红框中的第一行是该网卡的总接收与发送,下面几行是class这些网卡内部的具体信息。
然后中间那两个图形是描述红框中第一行的RX与TX信息。
实际上我们使用nload就差不多了,bmon个人比较少用。
bmon支持许多选项,能够制作HTML格式的报告。欲知更多信息,请参阅参考手册页。
6. slurm
slurm是另一款网络负载监控器,可以显示设备的统计信息,还能显示ASCII图形。它支持三种不同类型的图形,使用c键、s键和l键即可激活每种图形。slurm功能简单,无法显示关于网络负载的任何更进一步的详细信息。
安装slurm:
# debian或ubuntu
$ sudo apt-get install slurm
# fedora或centos
$ sudo yum install slurm -y
运行:
# sudo slurm -s -i 网卡 ,例如
$ sudo slurm -s -i ens9f0
效果:
上面是图形,不过没太大作用,下面是具体的网卡信息,主要看Current RX Speed即可,下图的带宽大概是9M/s左右。
更详细的用法请自行百度。
7. tcptrack
tcptrack类似iftop,使用pcap库来捕获数据包,并计算各种统计信息,比如每个连接所使用的带宽。它还支持标准的pcap过滤器,这些过滤器可用来监控特定的连接。
安装tcptrack:Ubuntu、Debian和Fedora在默认软件库里面就有它。CentOS用户则需要从RepoForge获得它,因为Epel里面没有它。
# ubuntu, debian
$ sudo apt-get install tcptrack
# fedora, centos(来自repoforge软件库)
$ sudo yum install tcptrack
运行:
# -r 代表几秒刷新,-i代表网卡。
sudo tcptrack -r 2 -i ens9f0
效果:
主要看TOTAL即可,可以看到,该网卡大概占用11M的带宽,和上面slurm的9M是差不多的,说明统计的数据没有问题。
8. vnstat
vnstat与另外大多数工具有点不一样。它实际上运行后台服务/守护进程,始终不停地记录所传输数据的大小。之外,它可以用来制作显示网络使用历史情况的报告。
安装vnstat:
# ubuntu或debian
$ sudo apt-get install vnstat
# fedora或 centos(来自epel)
$ sudo yum install vnstat
运行:
1)无任何选项的方式运行vnstat:
# 安装后默认运行了守护进程的服务。可以使用下面查看服务状态:
$ service vnstat status
# 然后输入以下命令,即可查看到对应的网卡历史数据:
# 运行没有任何选项的vnstat,只会显示自守护进程运行以来所传输的数据总量。
$ vnstat
效果:
状态如下:
可以看到对应网卡最大的带宽限制,都是千兆网卡。
历史数据如下:
Not enough data available yet.代表该网卡,自守护进程运行以来所传输的数据总量不足以显示。
然后只有ens9f0网卡有数据,并且有两行,但是注意,9月21日那行,应该不是准确的数据,因为今天是2021-9-10号,而不是21号,所以这行数据不理它。
而today代表是今天的开启守护进程的数据。例如total代表今天开启守护进程后,总共的使用的带宽总数。estimated是一个预估值,代表今天一定时间段内可能使用到的流量,不必太在意这个值。
2)带选项的vnstat 。 想实时监控带宽使用情况,请使用"-l"选项(实时模式)。然后,它会显示入站数据和出站数据所使用的总带宽量,但非精确地显示,没有关于主机连接或进程的任何内部详细信息。
vnstat -l -i ens9f0
效果:
可以看到,我目前接收数据占用的带宽还是挺大的,在46M/s,而发送则比较小,不到1M/s。
vnstat更像是一款制作历史报告的工具,显示每天或过去一个月使用了多少带宽。它并不是严格意义上的实时监控网络的工具。
所以,想查看以前的带宽数据,可以先下载后,开启守护进程,这样它就会后台帮你记录每天的带宽使用情况。如果想查看当前的带宽情况,建议使用nload更方便。
vnstat支持许多选项,支持哪些选项方面的详细信息请参阅参考手册页。
9. bwm-ng
bwm-ng(下一代带宽监控器)是另一款非常简单的实时网络负载监控工具,可以报告摘要信息,显示进出系统上所有可用网络接口的不同数据的传输速度。
安装bwm-ng:在CentOS上,可以从Epel来安装bwm-ng。
# ubuntu或debian
$ sudo apt-get install bwm-ng
# fedora或centos(来自epel)
$ sudo apt-get install bwm-ng
运行:
$ bwm-ng
效果:
可以看到,数据和上面几个命令都是差不多的,说明是正确的。
如果控制台足够大,bwm-ng还能使用curses2输出模式,为流量绘制条形图。
$ bwm-ng -o curses2
效果:
按下左右方向键即可切换网卡。
10. cbm:Color Bandwidth Meter
这是一款小巧简单的带宽监控工具,可以显示通过诸网络接口的流量大小。没有进一步的选项,仅仅实时显示和更新流量的统计信息。
安装:
$ sudo apt-get install cbm
运行:
cbm
效果:
这款和nload都是可以使用的,非常方便,感觉比nload还方便。
11. speedometer
这是另一款小巧而简单的工具,仅仅绘制外观漂亮的图形,显示通过某个接口传输的入站流量和出站流量。
安装speedometer:
# ubuntu或debian用户
apt-get install speedometer
centos中的安装:
speedometer 需要 urwid 模块的支持,安装:
cd /usr/local/src
wget -q https://pypi.python.org/packages/source/u/urwid/urwid-1.3.1.tar.gz
tar -zxvvf urwid-1.3.1.tar.gz
cd urwid-1.3.1
python setup.py install
#这里需要python的版本大于2.6,可用python命令直接查看版本。
# 再下载speedometer
cd /usr/local/src/
wget -q http://excess.org/speedometer/speedometer-2.8.tar.gz
tar -zxvvf speedometer-2.8.tar.gz
cd speedometer-2.8
python setup.py install
监控流量,运行:
speedometer -tx eth0 -rx eth0
#其中eth0是网卡,请根据你实际情况来,可用ifconfig命令查看网卡名称
-c 选项可以以垂直分割的方式显示不同的项目:
speedometer -tx eth0 -c -rx eth0
另外,Speedometer 还可以监测某个文件的下载速率,比如你正在下载 downlod.iso 这个文件,那么只要:
speedometer download.iso
就会显示出文件下载的速率,不过这招有时也不是很灵,因为大多数文件下载工具,会缓存下载的数据,或者在临时文件中保存下载的数据,而 Speedometer 只能通过监测文件大小的变化算出速率。
如果你知道下载文件的大小,可以在命令中指定大小,这样 Speedometer 就会帮你显示一个进度条,比如我知道 download.iso 是 80M:
speedometer download.iso $((80*1024*1024))
效果如下:
因为 Speedometer 可以监控文件大小的变化,所以除了网速之外,你还可以用他来监测其他的数据。
比如,你可以用下面的命令监测一下硬盘的写入速度:
dd bs=1000000 count=1000 if=/dev/zero of=big_nothing &
speedometer big_nothing
前面的 dd 命令在当前目录写入一个全零的 1G 大小的文件,然后在写入中,用 Speedmeter 监测速度:
Speedometer 可以同时检测多个网络接口、文件,并在一起显示出来,只要你的屏幕够大~。
最终常用的一个命令:
speedometer -r eth0 -t eth0
效果:
注:本命令我在测试的时候报错了,所以没进一步处理。因为我本身也很少这个命令。
列出错误如下:
12. pktstat
pktstat可以实时显示所有活动连接,并显示哪些数据通过这些活动连接传输的速度。它还可以显示连接类型,比如TCP连接或UDP连接;如果涉及HTTP连接,还会显示关于HTTP请求的详细信息。
安装:
$ sudo apt-get install pktstat
运行:
$ sudo pktstat -i ens9f0 -nt
效果:
可以看到bps这一列,主要的9.1M是哪一个连接的,如果想要查看哪个连接比较占用带宽,那么pktstat是不错的选择。
13. netwatch
netwatch是netdiag工具库的一部分,它也可以显示本地主机与其他远程主机之间的连接,并显示哪些数据在每个连接上所传输的速度。
安装:
$ sudo apt-get install netdiag
运行:
$ sudo netwatch -e ens9f0 -nt
效果:
关于netwatch更详细的用法与参数意思,请自行百度。因为这个命令看起来挺费人的,所以我本人也很少用,用上面几个也满足开发需求了。
14. trafshow
与netwatch和pktstat一样,trafshow也可以报告当前活动连接、它们使用的协议以及每条连接上的数据传输速度。它能使用pcap类型过滤器,对连接进行过滤。
安装:
# 实际上上面已经安装了,就不用再执行一次
$ sudo apt-get install netdiag
运行:
$ sudo trafshow -i ens9f0 tcp
效果:
Total代表命令trafshow执行后,服务器所使用的带宽总量。
关于 trafshow 更详细的用法与参数意思,请自行百度。
15. netload
netload命令只显示关于当前流量负载的一份简短报告,并显示自程序启动以来所传输的总字节量。没有更多的功能特性。它是netdiag的一部分。
安装:
# 同理,实际上上面已经安装了,就不用再执行一次
$ sudo apt-get install netdiag
运行:
$ netload ens9f0
效果:
关于 netload 更详细的用法与参数意思,请自行百度。
16. ifstat
ifstat能够以批处理式模式显示网络带宽。输出采用的一种格式便于用户使用其他程序或实用工具来记入日志和分析。
安装ifstat:
Ubuntu、Debian和Fedora用户在默认软件库里面就有它。CentOS用户则需要从Repoforge获得它,因为Epel里面没有它。
# ubuntu, debian
$ sudo apt-get install ifstat
# fedora, centos(Repoforge)
$ sudo yum install ifstat
运行:
ifstat
效果:
看到ens9f0,带宽大概在1M/s,感觉和上面的有点区别?上面的基本都是7M/s左右,是不是ifstat的KB/s的单位是字节/s而不是bps/s,是前者的话,就解释得通了,1000字节KB/s * 8就是bps/s即带宽的单位,即7M/s。
但是如果按照上面的命令输出,KB/s就是代表带宽的意思,所以说ifstat的统计准确性还是差了点。
后续自己可以百度一下ifstat的单位意思即可。
可以查看具体的网卡以及每秒刷新时间。
ifstat -t -i ens9f0 0.5
17. dstat
dstat是一款用途广泛的工具(用python语言编写),它可以监控系统的不同统计信息,并使用批处理模式来报告,或者将相关数据记入到CSV或类似的文件。这个例子显示了如何使用dstat来报告网络带宽。
安装dstat:
$ dstat -nt
-net/total- ----system----
recv send| time
0 0 |23-03 10:27:13
1738B 1810B|23-03 10:27:14
2937B 2610B|23-03 10:27:15
2319B 2232B|23-03 10:27:16
2738B 2508B|23-03 10:27:17
这里我没安装成功,就先不处理这个命令,具体请自行百度。
18. collectl
collectl以一种类似dstat的格式报告系统的统计信息;与dstat一样,它也收集关于系统不同资源(如处理器、内存和网络等)的统计信息。这里给出的一个简单例子显示了如何使用collectl来报告网络使用/带宽。
安装collectl:
# Ubuntu/Debian用户
$ sudo apt-get install collectl
#Fedora
$ sudo yum install collectl
上面会弹出一个选项,让你选web server,我们选第一个apached即可,没有安装这个软件会skip不处理,但是命令还是可以使用的。
关于 collectl 更详细的用法与参数意思,请自行百度。
额外命令监控带宽信息
1. sar
安装:
sudo apt-get install sysstat
运行:
# 1代表每1秒监控一次,总共4次。
sar -n DEV 1 4
效果:
可以看到下面,收发带宽大概也是7M/s左右,和上面也是差不多的。
rxpck/s txpck/s代表:查看每秒接收/发送包的速度。
rxKB/s txKB/s代表:每秒接收的速度即接收码率(转成带宽乘以8即可)以及每秒发送的速度即发送码率。
实际上sar更多是查看服务器的系统资源,例如CPU,磁盘等,不仅仅是带宽。
关于sar命令的更多选项,请看这篇文章linux 性能监控 sar命令。
2. watch ifconfig
实际上watch搭配ifconfig也可以大概的查看带宽数据,只不过需要自己统计。
这个命令的意思是:默认s执行一次ifconfig,这样就可以不断的查看到接收与发送的字节数。但是一般不会使用这个组合去看带宽,只是想告诉大家可以这样使用。
watch ifconfig
大概看一下效果即可。
上面的命令的单位KB/s,应该都是指带宽的意思。如果不是带宽的话而是字节每秒,则需要乘以8。
二 总结上面常用和观察直观的命令
- nload —> 方便查看一台服务器当前的带宽情况。
- nethogs —> 对于查看某个进程是否占用高带宽,nethogs是个不错的选择。
- slurm —> 方便查看一台服务器当前的带宽情况。
- tcptrack —> 方便查看每一个客户端与服务器的连接所占用的带宽,并且也方便查看一台服务器当前的带宽情况。
- vnstat —> 当开启该服务后,方便查看历史的带宽数据,每一天都会记录着带宽使用总量,只不过这一点有时数据不太准确,然后可通过service vnstat status代替ifconfig查看对应网卡的最大带宽限制,比较方便。也可以实时查看一台服务器当前的带宽情况vnstat -l -i ens9f0。
- bwm-ng —> 方便查看一台服务器当前的带宽情况,并且能同时看到所有网卡的带宽情况,对比nolad,优先选择bwm-ng。
- cbm —> 方便查看一台服务器当前的带宽情况,并且能同时看到所有网卡的带宽情况,对比nolad,优先选择cbm(因为nload需要按方向键切换网卡),cbm与bwm-ng差不多,选哪一个都可以,不过nload比较高大尚一点,这几个任选吧。
- pktstat —> 方便查看每一个客户端与服务器的连接所占用的带宽,与tcptrack类似,感觉选哪个都差别不大。
三 卸载上面的命令
如果不想要上面的命令了,可以使用下面方式进行卸载,注意,上面我都是使用apt-get的环境去下载的,所以使用apt-get去卸载。
卸载命令是统一的,将上面install替换成remove即可。
例如:
sudo apt-get remove collectl