在linux系统中,系统级的网络流量监控工具只能看到整体网卡的收发情况,无法直接对应到具体进程,要查看进程占用的网速和流量,需要使用支持进程级统计的专用工具。不同工具的功能侧重有所不同,用户可以根据实际需求选择合适的工具。
常用进程网络监控工具介绍
1. nethogs
nethogs是一款专门用于查看进程实时网速的工具,它会直接按进程分组显示每个进程的上传和下载速度,使用起来非常直观,适合快速定位当前占用带宽过高的进程。
安装方法
不同linux发行版的安装命令如下:
- Ubuntu/Debian系统:
sudo apt-get install nethogs - CentOS/RHEL系统:
sudo yum install nethogs,如果默认源没有该包,需要先安装epel源 - Arch Linux系统:
sudo pacman -S nethogs
使用方法
直接执行以下命令启动监控,默认会监控所有网卡:
# 监控所有网卡,需要root权限 sudo nethogs # 监控指定网卡,比如eth0 sudo nethogs eth0
输出内容中,PID是进程ID,USER是进程所属用户,PROGRAM是进程对应的程序路径,DEV是网卡名称,SENT是进程的上传速度,RECEIVED是进程的下载速度。
常用交互快捷键:
- m:切换速度单位,支持KB/s、MB/s、KB、MB等模式
- r:按RECEIVED列排序
- s:按SENT列排序
- q:退出监控
2. iftop
iftop主要用来监控网卡的实时流量,虽然默认不显示进程信息,但可以通过参数开启进程对应功能,适合查看整体网卡流量分布的同时关联对应进程。
安装方法
- Ubuntu/Debian系统:
sudo apt-get install iftop - CentOS/RHEL系统:
sudo yum install iftop
使用方法
执行以下命令启动监控,同时显示端口对应的进程信息:
# 监控所有网卡,显示端口对应的进程 sudo iftop -n -P # 监控指定网卡eth0 sudo iftop -n -P -i eth0
输出中,中间部分会显示每对IP和端口之间的流量情况,最下方会统计当前网卡的总流量、平均流量等数据。其中-n参数表示不进行DNS反向解析,-P参数表示显示端口对应的进程信息。
3. 基于/proc目录手动统计
如果需要长期统计某个进程的累计流量,也可以通过读取/proc目录下进程的网络统计文件实现,不需要安装额外工具。
每个进程的网络流量统计文件位于/proc/[PID]/net/dev,里面记录了该进程对应网卡的所有流量数据,不过这个文件是进程所属网络命名空间的网卡统计,更准确的方式是结合/proc/net/dev和进程的socket信息统计。
以下是一个简单的统计指定进程累计流量的脚本示例:
#!/bin/bash
# 传入进程PID作为参数
PID=$1
# 获取进程所有的socket inode
INODES=$(ls -l /proc/$PID/fd 2>/dev/null | grep socket | awk '{print $NF}' | cut -d: -f2)
# 初始化累计流量
TOTAL_RX=0
TOTAL_TX=0
# 遍历/proc/net/tcp和/proc/net/udp文件,匹配对应的inode统计流量
for INODE in $INODES; do
# 统计TCP流量
while read line; do
RX=$(echo $line | awk '{print $3}')
TX=$(echo $line | awk '{print $4}')
TOTAL_RX=$((TOTAL_RX + RX))
TOTAL_TX=$((TOTAL_TX + TX))
done <<(grep ":$INODE " /proc/net/tcp 2>/dev/null)
# 统计UDP流量
while read line; do
RX=$(echo $line | awk '{print $3}')
TX=$(echo $line | awk '{print $4}')
TOTAL_RX=$((TOTAL_RX + RX))
TOTAL_TX=$((TOTAL_TX + TX))
done <<(grep ":$INODE " /proc/net/udp 2>/dev/null)
done
echo "进程$PID累计下载流量: $((TOTAL_RX / 1024)) KB"
echo "进程$PID累计上传流量: $((TOTAL_TX / 1024)) KB"
使用方式:给脚本添加执行权限后,传入目标进程PID即可查看累计流量:
chmod +x count_flow.sh sudo ./count_flow.sh 1234
工具选择建议
如果是临时排查当前哪个进程占用网速过高,优先选择nethogs,操作简单结果直观;如果需要查看网卡的整体流量分布,同时关联少量进程信息,可以选择iftop;如果需要长期统计某个进程的累计流量,或者在没有安装额外工具的环境下排查问题,可以使用/proc目录手动统计的方式。
| 工具名称 | 核心功能 | 适用场景 | 是否需要安装 |
|---|---|---|---|
| nethogs | 实时显示进程级上传下载速度 | 快速定位高带宽消耗进程 | 是 |
| iftop | 监控网卡实时流量,可关联进程端口 | 查看整体网卡流量分布 | 是 |
| /proc手动统计 | 统计进程累计流量 | 无额外工具环境下的长期流量统计 | 否 |