首页 帮助中心 常见问题 Linux进程级网络流量监控的具体流程
Linux进程级网络流量监控的具体流程
时间 : 2025-07-23 10:13:43 编辑 : 华纳云 阅读量 : 9

Linux服务器突发网络拥堵时,快速定位高流量进程如同大海捞针。某电商平台曾因一个异常的日志采集进程耗尽10Gbps带宽,导致核心交易服务瘫痪。需要关注工具是不是精准可靠,是否会影响性能及快速定位问题。本文将揭示七种精准监控方案,从基础命令到内核级追踪,彻底解决谁在偷跑流量的难题。

基础监控:快速定位流量消耗者

nethogs是进程级流量仪表盘 :

nethogs d 2 v 3 eth0  # 每2秒刷新,显示3级进程树

输出示例:

PID    USER   PROGRAM              DEV   SENT   RECV 
12345  mysql  /usr/sbin/mysqld     eth0  12.3MB 8.7MB
6789   nginx  nginx: worker process eth0  45.6MB 120.4MB

关键参数:

`c 10`:追踪前10名进程

`t`:跟踪模式(实时高亮变化值)

iftop + pidstat 联合分析 

iftop P N n i eth0  # 显示端口流量
pidstat d l p ALL 1  # 每秒刷新进程I/O

发现异常端口后,立即锁定进程:

lsof i :443  # 查看443端口占用进程

深度追踪:eBPF内核级监控

bcctools 实时流量拓扑,安装工具包:

apt install bpfcctools linuxheaders$(uname r)

监控进程流量:

/usr/share/bcc/tools/tcptop C 5  # 每5秒刷新TCP流量排名

输出动态字段:

PID    COMM         LADDR           RADDR            RX_KB  TX_KB
1234   curl         192.168.1.10    54.32.1.20       120    45
5678   kafka        10.0.0.5        10.0.0.12        980    2300

自定义eBPF流量分析器 

保存以下代码为`flowmon.c`

c
#include <uapi/linux/ptrace.h>
#include <net/sock.h>
#include <bcc/proto.h>
struct data_t {
u32 pid;
u64 rx;
u64 tx;
char comm[TASK_COMM_LEN];
};
BPF_HASH(flow, u32, struct data_t);
int trace_recv(struct pt_regs ctx, struct sock sk) {
u32 pid = bpf_get_current_pid_tgid();
struct data_t data = {.pid = pid};
bpf_get_current_comm(&data.comm, sizeof(data.comm));
u64 val = flow.lookup(&pid);
if (val) data.rx = val + 1;
else data.rx = 1;
flow.update(&pid, &data);
return 0;
}

编译运行:

bpftrace flowmon.c

容器环境专项监控

cgroup流量隔离统计 

# 查看容器cgroup流量
cat /sys/fs/cgroup/net_cls/docker/<容器ID>/net_stat

关键指标:

rx_bytes: 1256890432

tx_bytes: 567832189

dropped: 0

nsenter跨命名空间追踪 

进入容器网络命名空间:

nsenter t $(docker inspect f '{{.State.Pid}}' nginx) n nethogs

高级流量诊断方案

tcpdump进程级过滤 

tcpdump i eth0 w nginx.pcap 'port 80 and host 192.168.1.10' &
pidstat p $(pgrep tcpdump) 1  # 监控抓包进程资源消耗

NetFlow协议分析 

配置`softflowd`采集进程流量:

softflowd i eth0 n 10.0.0.1:9995 v 9 p /var/run/softflowd.pid

解析工具:

nfdump R /var/netflow o "fmt:%ts %pkt %byt %sa %sp > %da %dp"

性能优化与自动化

低开销监控方案对比

工具 CPU占用 内存消耗 精度
nethogs   5MB 进程级
tcptop(ebpf) 2MB  连接级
iftop  15MB   端口级

自动化告警脚本 

保存为`flow_alert.sh`

#!/bin/bash
ALERT_THRESHOLD=10000 # 10Mbps
while true; do
NIC="eth0"
RX=$(nethogs t c 2 $NIC | grep E '[09]+\.[09]+MB' | awk '{sum+=$6} END {print sum1024}')
if (( $(echo "$RX > $ALERT_THRESHOLD" | bc l) )); then
TOP_PROC=$(nethogs t c 1 $NIC | head 5)
echo "警报:$NIC 接收流量 ${RX}KB/s" | mail s "流量超标" admin@example.com
echo "$TOP_PROC" >> /var/log/flow_alert.log
fi
sleep 30
done

某云服务商应用上述方案后,故障定位时间从平均47分钟缩短至3分钟。核心策略在于:日常监控使用nethogs轻量级扫描,异常时启动eBPF深度追踪,容器环境通过cgroup直连物理层统计。当检测到某Kafka进程突发10Gbps流量时,结合tcptop发现是消费者组配置错误导致数据回冲,修复后带宽成本月降$12万。

网络流量监控如同给系统装上CT扫描仪——基础命令是X光片快速定位问题区域,eBPF则是增强MRI揭示微观数据流动,而cgroup统计提供了容器环境的专属诊断舱。掌握这组工具链,您将彻底终结流量黑洞的运维噩梦。

华纳云 推荐文章
基于Linux系统的NAT服务器优化配置方案分享 nohup命令在Linux系统中的优势及使用方法 Linux进程网络流量如何进行监控(详细指南) Linux服务器上如何配置FTP服务器磁盘配额(以debian系统为例) 如何使用iptables设置Linux服务器高级防火墙规则? Linux服务器如何查看端口连接数 英国服务器修改Linux系统时区操作详细步骤 如何使用命令行在Linux系统中导航文件系统? 如何配置VNC实现Linux系统图形化远程登录? 香港云主机Linux系统怎么搭建WordPress网站
活动
客服咨询
7*24小时技术支持
技术支持
渠道支持