带宽跑满找元凶:iftop、nethogs与tcpdump排查详解

    发布时间:2026-09-10 05:02 更新时间:2026-09-10 05:02 阅读量:0

    服务器带宽被占满时,网站打开缓慢,远程操作都可能卡到断连。登录系统看CPU和内存往往一切正常,硬盘读写也不高,可流量监控就是持续飘红。这时候需要从进程、IP和端口三个维度同时下手,把占用带宽的“元凶”精确揪出来。下面介绍iftop、nethogs和tcpdump这三个工具的配合方法,它们分别擅长回答“哪个程序在跑流量”“连到哪些IP”和“跑的是什么内容”这三个问题。

    先从进程维度入手:用nethogs找到具体是哪个程序

    如果服务器上跑着多个站点或服务,最直接的想法是按进程统计流量。nethogs就是这样一个小工具,它不依赖iptables计数,而是读取网络设备的数据来归因到进程名。Debian/Ubuntu可以通过ap包安装,CentOS/RHEL则需要从epel或第三方源获取,具体安装方式以官方仓库说明为准。

    sudo apt install nethogs       # 或 sudo yum install nethogs
    echo nethogs eth0 # 改为你的外网网卡名

    运行后屏幕会出现表格,列出进程名、用户、发送速率和接收速率。按键盘上从左到右的排序方式切换,让流量最高的进程跑在最上面。如果发现某个陌生的程序名或熟悉的程序(比如php-fpm、nginx)流量异常,就记下它的进程PID,再用ps aux | grep PID查看它是从哪个站点目录启动的。需要注意的是,nethogs对流量绕过多队列或使用聚合口的情况可能统计不全,遇到虚拟网卡和bond接口时需要确认实际绑定的物理接口名称。

    继续锁IP和端口:iftop展示实时连接,tcpdump抽样抓内容

    知道是哪个程序还不够,很多时候还需要清楚它在和哪些远程IP通信。iftop能按连接显示一对一的实时带宽速率,运行后默认会把当前接口的所有连接都列出来,按流量降序排列。为了让结果更易读,可以加上-n参数跳过DNS解析,避免反查慢导致界面卡顿;-P参数会顺便展示端口。

    sudo apt install iftop      # 或 sudo yum install iftop
    sudo iftop -i eth0 -nP

    iftop界面中,底部会标出综合速率峰值,但更重要的是观察最上面的连接条目。如果某一条连接长时间占据大量带宽,且远程IP不像正常的CDN节点或用户访问地址,就用tcpdump针对这个IP和端口抓一小部分流量看看端口特征。抓包前必须想清楚,带宽已经紧张,抓包文件本身也会占磁盘,所以只用“抓每个包的前80或100字节”这样的小尺寸采样。

    sudo tcpdump -i eth0 -nn host 203.0.113.10 and port 8080 -X -s 96 -c 1000

    上面命令会抓取1000个与目标IP的8080端口通信的数据包,并用十六进制和ASCII显示。-s 96表示只取前96字节,这样能看清HTTP请求行或协议头前几个字段,判断是不是业务流量。如果数据包内容明显像BitTorrent、挖矿协议或某种加密shell特征,那基本就能确定是异常外联。不过tcpdump输出的是原始数据,解读需要一定基础,不确定时不要急着下结论,多抓几组样本对比。

    三步结合排查:实际操作顺序与避坑提醒

    实际排障时,建议不要依赖单一工具,而是按下面顺序走一遍:先通过iftop或系统流量监控确认哪个网卡在跑满,再运行nethogs找到对应进程,最后用tcpdump针对进程日志里出现的可疑IP抽查端口和数据特征。同时可以在另一个SSH窗口用lsof -i :端口反查端口被哪个脚本占用,这样能把进程、IP和端口完整串成一条证据链。

    要特别提醒几件事。第一,这些工具都需要root权限,普通用户执行会提示权限不足。第二,当带宽被占满时,SSH本身可能延迟很高甚至断连,有条件的话先通过面板的VNC或IPMI登录,再执行命令,避免命令解释到一半就断了。第三,不要在业务高峰直接大规模抓包,tcpdump不加缓冲区限制可能产生海量文件把磁盘写满,建议配合-c指定数量,并设一个输出文件路径,比如-w /tmp/cap.pcap,事后再离线分析。第四,如果流量跑满与某个Web服务关联不大,也可以顺手检查是不是服务器被植入了后门程序,具体排查思路可以参照本站“WordPress被挂马后的排查与清理”那篇文章里的文件审计方法。

    带宽异常未必是攻击,也可能是某个备份任务、图片原图下载、或日志同步逻辑写得不合理。用nethogs确认进程,用iftop对IP和端口做快速判断,再用tcpdump挑选关键包做最终验证,这套组合拳能让你在几分钟内缩小排查范围。把这些工具的用法记成一个小手册,下回再遇到带宽告警时,不用再对着监控面板干着急。

    继续阅读

    📑 📅
    WordPress被挂马后的排查与清理:从文件到数据库的完整路径 2026-09-10
    访问日志不会看?goaccess与awk帮你快速定位异常请求 2026-09-09
    Nginx伪静态规则从零配置:WordPress与ThinkPHP的rewrite写法详解 2026-09-09
    WordPress搬家进阶:用WP-CLI替换数据库不损害序列化数据 2026-09-09
    网站搬家实战指南:换服务器时网站文件与数据库如何安全完整迁移 2026-09-07
    自建网站状态监控:Uptime Kuma部署与告警配置 2026-09-10
    MySQL慢查询日志开启与参数分析:用mysqldumpslow定位拖慢网站的SQL 2026-09-10
    Nginx 502/504 排查:从错误日志到PHP-FPM进程池状态 2026-09-10
    宝塔面板安全加固:面板端口、安全入口、SSL与登录告警设置 2026-09-11
    服务器磁盘被写满的排查流程:df与du定位、日志切割与清理注意事项 2026-09-11