Linux命令-nethogs(终端下的网络流量监控工具)

张开发
2026/4/7 4:52:42 15 分钟阅读

分享文章

Linux命令-nethogs(终端下的网络流量监控工具)
nethogs是 Linux 中一个按进程实时监控网络带宽使用情况的工具。它能够显示每个进程的网络流量帮助快速定位哪个进程占用了大量网络带宽。 基本语法nethogs[选项][网络接口]重要特性实时显示每个进程的网络流量按发送和接收流量分别统计支持按流量排序支持监控特定网络接口刷新频率可配置 常用选项选项说明-d 秒设置刷新间隔时间默认 1 秒。-t跟踪模式累积流量统计。-p混杂模式监听所有流量需要 root 权限。-s按发送流量排序。-r按接收流量排序。-m KB设置流量单位阈值KB/s。-c 次数更新指定次数后退出。-V显示版本信息。-h显示帮助信息。-v显示更多详细信息。 核心用法示例1. 基本监控# 监控所有网络接口需要 root 权限sudonethogs# 监控特定网络接口sudonethogs eth0sudonethogs wlan0sudonethogs enp3s0# 设置刷新间隔为 3 秒sudonethogs-d3# 监控特定接口并设置刷新间隔sudonethogs-d5eth02. 排序和显示模式# 按发送流量排序sudonethogs-s# 按接收流量排序sudonethogs-r# 跟踪模式显示累积流量sudonethogs-t# 设置流量阈值只显示流量大于 10KB/s 的进程sudonethogs-m10# 混杂模式监听所有网络流量sudonethogs-p3. 高级用法# 监控特定接口按发送排序3秒刷新sudonethogs-d3-seth0# 监控并更新5次后退出sudonethogs-c5# 监控多个接口sudonethogs eth0 wlan0# 显示详细信息sudonethogs-v️ 交互式命令在 nethogs 运行界面中可以使用以下快捷键快捷键功能m在 KB/s、KB、B、MB 之间切换显示单位。r按接收流量排序。s按发送流量排序。q退出程序。S切换是否显示发送流量。R切换是否显示接收流量。l显示/隐藏日志信息。 输出解读运行sudo nethogs后会显示类似下面的界面NetHogs version 0.8.6 PID USER PROGRAM DEV SENT RECEIVED 1234 alice /usr/bin/firefox eth0 12.123 45.678 5678 bob sshd: bobpts/0 eth0 5.432 1.234 9012 root /usr/bin/apt-get eth0 0.123 1024.567各列含义PID进程 IDUSER进程所属用户PROGRAM进程名称或命令行DEV使用的网络接口SENT发送流量速率默认 KB/sRECEIVED接收流量速率默认 KB/s 实用场景示例1. 查找带宽占用进程# 实时监控找出哪个进程占用带宽最高sudonethogs# 按接收流量排序找出下载流量大的进程sudonethogs-r# 按发送流量排序找出上传流量大的进程sudonethogs-s2. 监控特定服务# 监控 Web 服务器的网络流量sudonethogs-d2eth0|grep-E(apache2|nginx|httpd)# 监控数据库服务的网络流量sudonethogs-d2eth0|grep-E(mysql|postgres|mongodb)# 监控 SSH 连接的网络流量sudonethogs-d2eth0|grepsshd3. 定时监控和记录# 监控10次后退出并保存到文件sudonethogs-c10-d2nethogs_log.txt# 监控特定接口每5秒刷新持续1分钟timeout60ssudonethogs-d5eth0# 监控并将结果同时输出到屏幕和文件sudonethogs-d3|teenethogs_output.txt4. 自动化监控脚本#!/bin/bash# 网络流量监控脚本INTERFACEeth0THRESHOLD100# KB/sLOG_FILE/var/log/nethogs_monitor.logALERT_EMAILadminexample.comecho开始网络流量监控 - 接口:$INTERFACE$LOG_FILEecho阈值:${THRESHOLD}KB/s$LOG_FILEecho时间:$(date)$LOG_FILEecho$LOG_FILE# 监控函数monitor_traffic(){sudonethogs-c1-d2$INTERFACE-t|tail-n3|whileread-rline;dopid$(echo$line|awk{print $1})user$(echo$line|awk{print $2})program$(echo$line|awk{print $3 $4 $5 $6})sent$(echo$line|awk{print $(NF-1)}|seds/KB\/s//)received$(echo$line|awk{print $NF}|seds/KB\/s//)# 检查是否超过阈值if(($(echo $sent$THRESHOLD|bc-l)))||(($(echo $received$THRESHOLD|bc-l)));thenecho[警报]$(date%Y-%m-%d %H:%M:%S)$LOG_FILEecho进程:$program(PID:$pid, 用户:$user)$LOG_FILEecho发送:${sent}KB/s, 接收:${received}KB/s$LOG_FILEecho--------------------------------------$LOG_FILE# 发送邮件警报echo进程$program(PID:$pid) 网络流量异常|\mail-s网络流量警报 -$(date%Y-%m-%d %H:%M:%S)$ALERT_EMAILfidone}# 持续监控whiletrue;domonitor_trafficsleep10done️ 故障排查示例1. 服务器带宽异常排查# 发现服务器带宽跑满快速定位问题进程sudonethogs# 如果 nethogs 显示不明显可以增加刷新频率sudonethogs-d0.5# 按流量排序查看sudonethogs-s# 查看上传最多的进程sudonethogs-r# 查看下载最多的进程# 监控特定时间段timeout30ssudonethogs-d1bandwidth_log.txt2. 找出异常网络连接# 结合 netstat 和 nethogs 分析# 首先用 nethogs 找出高流量进程sudonethogs-s|head-10# 假设发现 PID 1234 流量异常查看该进程的网络连接sudonetstat-tunap|grep1234# 查看进程详细信息psaux|grep1234# 查看进程打开的文件包括网络连接sudolsof-p12343. 监控 Docker 容器流量# Docker 容器的网络流量会显示在宿主机的网络接口上# 首先找出容器对应的进程dockerps--formattable {{.Names}}\t{{.ID}}# 监控所有网络流量查找容器相关进程sudonethogs|grep-E(docker|containerd)# 或者通过进程树查找sudonethogs|whileread-rline;dopid$(echo$line|awk{print $1})container_id$(ps-oppid-p$pid|xargsdockerps--filterpid2/dev/null|tail-1)if[[-n$container_id]];thenecho$line(容器:$container_id)elseecho$linefidone⚙️ 安装和配置1. 安装 nethogs# Debian/Ubuntusudoaptupdatesudoaptinstallnethogs# CentOS/RHELsudoyuminstallepel-releasesudoyuminstallnethogs# Fedorasudodnfinstallnethogs# Arch Linuxsudopacman-Snethogs# 从源码编译安装gitclone https://github.com/raboof/nethogs.gitcdnethogsmakesudomakeinstall2. 配置 sudo 权限可选为了避免每次都需要输入 sudo 密码可以配置 sudoers# 编辑 sudoers 文件sudovisudo# 添加以下行允许特定用户无需密码运行 nethogsusernameALL(ALL)NOPASSWD: /usr/sbin/nethogs# 或者允许所有用户不推荐# %users ALL(ALL) NOPASSWD: /usr/sbin/nethogs3. 创建别名方便使用# 添加到 ~/.bashrc 或 ~/.bash_aliasesaliasnethogssudo nethogsaliasnethogs-eth0sudo nethogs eth0aliasnethogs-wlan0sudo nethogs wlan0aliasnethogs-sort-sendsudo nethogs -saliasnethogs-sort-recvsudo nethogs -r# 重新加载配置source~/.bashrc 与其他网络监控工具对比工具监控重点实时性易用性特点nethogs进程级网络流量实时简单按进程显示快速定位问题iftop连接级网络流量实时中等显示每个连接的流量nload接口级网络流量实时简单图形化显示接口流量vnstat接口级流量统计历史简单统计历史流量数据bmon接口级网络监控实时中等图形化显示多个接口iptraf网络流量分析实时复杂详细的流量分析 使用技巧快速定位问题当服务器带宽异常时首先运行sudo nethogs快速找出占用带宽的进程。结合其他工具nethogs 显示进程结合netstat、lsof、ss查看具体连接。监控特定用户使用grep过滤特定用户的进程sudo nethogs | grep username。长期监控使用-c选项指定监控次数配合重定向保存日志。容器环境在 Docker 或 Kubernetes 环境中nethogs 可以帮助找出哪个容器占用带宽。⚠️ 注意事项需要 root 权限nethogs 需要 root 权限才能监控所有进程的网络流量。实时监控nethogs 是实时监控工具不适合长期数据收集。进程名称显示某些进程可能显示为命令行参数需要结合ps命令查看详细信息。内核模块nethogs 依赖内核的网络统计信息某些虚拟化环境可能不支持。资源占用nethogs 本身会占用少量 CPU 和内存资源。 快速参考卡基本使用 sudo nethogs # 监控所有接口 sudo nethogs eth0 # 监控特定接口 sudo nethogs -d 3 # 3秒刷新间隔 sudo nethogs -c 10 # 更新10次后退出 排序模式 sudo nethogs -s # 按发送流量排序 sudo nethogs -r # 按接收流量排序 sudo nethogs -t # 跟踪模式累积流量 交互命令 m - 切换流量单位 r - 按接收排序 s - 按发送排序 q - 退出 S - 切换发送流量显示 R - 切换接收流量显示 实用组合 sudo nethogs -d 2 -s eth0 # 监控eth0按发送排序2秒刷新 sudo nethogs | grep firefox # 只显示Firefox进程 timeout 30s sudo nethogs # 监控30秒后自动退出nethogs是排查网络带宽问题的利器特别适合快速定位哪个进程占用了大量网络带宽。它简单直观不需要复杂的配置是 Linux 系统管理员和网络工程师必备的工具之一。

更多文章