如何使用nethogs精准分析Linux进程网络流量
今天,给大家介绍一款实用的流量监控工具——Nethogs,可以说是Linux运维必备工具!
一、Nethogs是什么?
Nethogs是一款开源的进程级网络流量监控工具。和其他传统的网络监控工具(比如iftop、netstat)不太一样,它不是按照协议或者子网来统计带宽使用情况,而是直接精确到每个进程。这意味着,不管是哪个程序在偷偷占用大量网络带宽,Nethogs都能帮你揪出来,而且它不需要依赖特殊的内核模块就能工作。通过实时监测网络接口,一旦有进程突然占用大量带宽,Nethogs能让你第一时间发现。
二、安装Nethogs
Nethogs对主流的Linux发行版都很友好,通过系统自带的包管理器就能轻松安装。
- Debian/Ubuntu系统:在终端输入以下命令即可安装:
sudo apt-get install nethogs
- Fedora系统:安装命令如下:
sudo dnf install nethogs
- Arch Linux系统:执行这条命令进行安装:
sudo pacman -S nethogs
- CentOS/RHEL系统:可以使用下面的命令安装,部分系统可能需要手动添加仓库,具体操作参考项目文档:
sudo yum install nethogs # 或使用 EPEL 源
三、Nethogs基础用法详解
(一)启动监控
要启动Nethogs进行网络流量监控,在终端输入下面的命令:
sudo nethogs
这里需要注意,必须使用管理员权限运行,否则可能有些进程的流量信息无法显示出来。
Nethogs启动后的输出界面包含了很多关键信息:
- PID:就是进程的ID号,每个进程都有独一无二的ID,方便我们准确找到对应的进程。
- USER:表示运行这个进程的用户是谁。
- PROGRAM:显示的是进程的名字或者路径,通过它能知道具体是哪个程序在占用网络。
- SENT:记录的是这个进程累计发送出去的网络流量。
- RECEIVED:指的是进程累计接收到的网络流量。
- TOTAL:就是发送流量和接收流量加起来的总和。
(二)指定网络接口
如果你只想监控某个特定的网络接口(比如eth0),可以用下面的命令:
sudo nethogs eth0
要是你还想把环回接口(lo)也包含进去一起监控,加上-a参数就行:
sudo nethogs -a
(三)交互式操作
在Nethogs运行过程中,有一些快捷键可以使用:
- 按下
q
键,就能退出监控界面。 - 按
s
键,会按照发送流量的大小对进程进行排序;按r
键,则是按照接收流量排序。 - 按
m
键,可以在不同的流量单位(B/KB/MB)之间进行切换,方便查看。
四、Nethogs高级功能与参数介绍
Nethogs提供了很多参数,能让我们实现更精细化的监控。
- 设置刷新间隔:使用
-d <秒>
参数可以设置Nethogs数据刷新的时间间隔,默认是1秒刷新一次。比如想改成每5秒刷新一次,就用这个命令:
sudo nethogs -d 5
- 运行指定次数后退出:
-c <次数>
参数可以让Nethogs运行指定次数后自动退出。例如,只运行3次就退出,命令如下:
sudo nethogs -c 3
- 设置流量单位模式:
-v <模式>
参数可以设置流量的显示单位模式。0
代表以KB/s显示(这是默认模式);1
表示显示总KB数;2
是显示总字节数(B);3
则是以总MB数显示。比如想用MB显示总流量,就执行这个命令:
sudo nethogs -v 3
- 追踪模式:
-t
参数开启追踪模式,在这种模式下,Nethogs会输出单列数据,方便记录到日志里。例如,把监控数据记录到/var/log/network.log文件中,命令是:
sudo nethogs -t >> /var/log/network.log
- 监听混杂模式:
-p
参数用于开启监听混杂模式,但这个模式要谨慎使用,一般只在测试的时候用。比如在eth0接口上开启混杂模式:
sudo nethogs -p eth0
- 静默模式:
-s
参数可以启用静默模式,在这种模式下,Nethogs只会显示统计信息,通常和-t
参数一起使用。例如:
sudo nethogs -t -s
下面是一个组合使用的例子,每10秒监控enp1s0接口,一共监控3次,然后把数据记录到nethogs.log文件中:
sudo nethogs -t -d 10 -c 3 enp1s0 >> nethogs.log
五、Nethogs实战应用
(一)快速排查网络拥堵
当你感觉网速不对劲,变得很慢的时候,就可以运行sudo nethogs
命令,它能马上帮你找到占用大量带宽的进程PID。比如说,发现PID为1234的进程一直在上传大量数据,这时候可以通过ps -ef | grep 1234
命令来查看这个进程的详细信息,然后根据情况终止这个异常的任务。
(二)带宽优化配置
通过长期使用Nethogs进行监控,你可以发现一些不必要占用网络带宽的进程。比如,发现某个后台同步工具总是在深夜持续下载数据,这可能会影响白天正常的业务网络使用,就可以调整它的运行时间,避免对业务造成影响。
(三)安全监控
如果突然出现某个进程占用大量网络流量,这可能意味着有恶意程序在搞破坏。我们可以结合像awk这样的日志分析工具来定位异常。下面这条命令可以从nethogs.log文件中提取出高流量的进程:
# 提取高流量进程 awk '{print $1,$2,$7}' nethogs.log | sort -nrk 3 | head
这条命令的作用是,从日志文件中提取出进程ID、运行用户和总流量这几列数据,然后按照总流量从大到小排序,最后只显示前几条数据,这样就能快速找到那些高流量的进程了。
六、Nethogs与同类工具对比
在网络监控领域,有很多工具可以选择,下面来看看Nethogs和其他常见工具的区别:
- iftop:主要按照协议或者子网来统计流量,适合用来分析实时的网络流量分布情况。
- netstat:它的主要功能是查看网络连接状态,比如统计端口使用情况、连接数量等。
- nload:专注于网卡级别的实时带宽统计,比较适合用来监控单个网卡的性能。
- Nethogs:最大的特点就是能够进行进程级的网络流量监控,而且不需要内核模块支持,还可以实时交互操作。当你想要确定是哪个进程在占用网络带宽时,Nethogs就非常合适。
七、常见问题解答
(一)为什么运行Nethogs需要sudo权限?
因为Nethogs要获取底层网络接口的信息,普通用户的权限是不够的,所以必须使用管理员权限(sudo)才能正常运行,这样它才能全面地监控到所有进程的网络流量情况。
(二)怎么才能显示完整的进程路径?
默认情况下,Nethogs显示的是进程名。有些版本可以通过-p
参数来显示完整路径(部分版本可能不支持这个功能)。另外,也可以直接查看PROGRAM列,有些进程的路径信息会直接显示在那里。
(三)为什么监控不到网卡流量?
首先要确认网卡名称是不是正确,可以使用ip a
命令查看。如果名称没问题,还监控不到,可以尝试加上-a
参数,让它包含所有的网络接口进行监控。另外,如果是在容器或者虚拟机环境下,可能还需要调整相关权限才能正常监控。
(四)如何实现自动化监控?
可以结合脚本让Nethogs周期性地运行。比如下面这个脚本,它能让Nethogs每小时记录一次流量数据:
# 每小时记录一次流量数据 while true; do sudo nethogs -t -d 3600 >> /var/log/nethogs_hourly.log; done
这个脚本的意思是,让Nethogs一直循环运行,每次运行时以追踪模式,每隔3600秒(也就是1小时)记录一次数据,然后把数据追加到/var/log/nethogs_hourly.log文件中。
八、总结
Nethogs作为一款强大的进程级网络流量监控工具,有着进程级带宽监控和无需内核依赖的优势,在排查网络问题、优化带宽配置和保障网络安全方面都能发挥很大的作用。它丰富的参数和功能,可以满足不同的监控需求。对于运维人员来说,掌握Nethogs的高级用法,比如自动化日志记录和与其他工具的集成,能大大提高工作效率,这样你的网络运维工作也更加轻松。