1. 哪个程序占用了带宽?
查看一台主机的监控,有时候我们会发现网络带宽被打满了,这时候怎样定位出是哪个程序大量占用了带宽?
答:使用网络数据包分析工具。比如iftop,可以监控到进出网卡的带宽用量。
参考文档:
- How do I find out which process is eating up my bandwidth?
- iftop: display bandwidth usage on an interface
- 网络流量监控工具iftop
- iftop简介
- 从零开始学习iftop流量监控
2. 安装iftop
1 | yum install iftop |
3. 使用iftop
显示当前主机的流量和端口。
1 | iftop -P |
这里比较坑的是,有的统计项并不会显示端口。原因未知,解决方法未知。。。
按下n,将输出的主机信息都通过IP显示,不进行DNS解析,因为解析可能不准确而产生误导。
4. 输出内容说明
iftop的输出从上到下可以分为三部分:流量刻度,详细信息和统计信息。
4.1. 流量刻度
是iftop输出中最上面的一行。
此行信息是流量刻度,用于显示网卡带宽流量。
4.2. 详细信息
是iftop输出中最大的一个部分,此部分又分为左、中、右三列。
- 左边显示本机的主机名/IP和端口
- 中间显示正在和本机通信的主机名/IP和端口,=>代表发送数据,反之<=是接受数据。
- 右边表示2s内,10s内,40s内的一个平均流量值,显示不同时间段的流量值。
4.3. 统计信息
位于iftop输出的最下面。
TX表示发送流量,RX表示接收流量,TOTAL表示发送和接收的全部流量。
- cum:从运行iftop到当前时刻,发送和接收的总流量。
- peak:流量的峰值。
- rate:在过去2s,10s,40s,平均的流量的值。
5. iftop常用参数
1 | -i 指定需要检测的网卡, 如果有多个网络接口,则需要注意网络接口的选择,如:# iftop -i eth1 |
6. 找到最费流量的IP和端口
1、进入iftop界面
1 | iftop -i eth0 -nNB -m 10M |
- -i 指定网卡,
- -n 代表主机通过ip显示不走DNS
- -N 只显示连接端口号,不显示端口对应的服务名称(不加会显示如ssh这样的服务名称,不便于排查)
- -B 指定显示单位为Kb,默认是bit,太小!
- -m 设置输出界面中最上面的流量刻度最大值,流量刻度分5个大段显示
2、系列操作
- 按下L显示流量刻度
- 按下T显示总量
- 按下3,根据最近40s统计排序
- 按下t,发送和接受合成一行
- 多按几次B,查看最近2s、10s、40s的统计,找到的流量用得最多的IP
- 按下l,输入指定IP,回车
- 按下p,根据端口号显示
7. 根据端口号查找进程
参考文档《shell命令之系统管理》
8. 后记
使用iftop命令查找占用带宽最多的程序,还是比较麻烦的,后来发现了一个更好用的工具 nethogs。
nethogs安装使用方法:
1 | yum install nethogs |