CentOS7服务器流量飙升别慌!手把手教你用iftop+nload揪出‘吃流量’的进程
CentOS7服务器流量异常排查实战从应急响应到根治方案凌晨三点手机突然响起刺耳的告警声——服务器出口带宽跑满业务系统响应缓慢。作为运维人员这种场景再熟悉不过。本文将分享一套经过实战检验的流量异常排查组合拳结合iftop和nload两款利器带你快速定位问题根源。1. 应急响应建立排查框架收到告警后盲目操作是大忌。建议按以下步骤建立排查框架确认现象真实性通过监控系统查看历史流量曲线排除误报可能评估影响范围检查关键业务接口状态确定故障等级保留现场证据立即保存当前网络连接状态和进程列表制定回滚预案准备应急措施如流量切换或服务降级重要提示在流量异常期间避免直接重启服务或服务器这可能导致问题线索丢失。典型异常流量特征对比表特征类型正常业务流量异常/攻击流量时间分布符合业务规律突发或持续高峰连接数与用户量匹配异常高并发目标端口已知业务端口随机或敏感端口源IP分布真实用户IP集中或伪造IP2. 工具组合iftop与nload的黄金搭档2.1 iftop网络连接显微镜安装iftopCentOS7环境yum install epel-release -y yum install iftop -y实战常用参数组合iftop -i eth0 -nNPB-i指定网卡-n禁用主机名解析加快显示-P显示端口信息-B以Byte为单位显示关键指标解读TX/RX实时发送/接收流量重点关注突增方向Peak历史峰值帮助判断异常程度Cumm累计流量识别持续消耗型进程2.2 nload流量全景仪表盘安装nloadyum install nload -y推荐使用方式nload -u M -t 200 eth0-u M以MB为单位显示-t 200刷新间隔200mseth0指定监控网卡界面区域解析--------------------- | Incoming (入站流量) | | Curr: 24.5 MB/s | | Avg: 18.2 MB/s | --------------------- | Outgoing (出站流量) | | Peak: 30.1 MB/s | | Ttl: 4.2 GB | ---------------------3. 深度排查从现象到根源3.1 定位异常进程四步法确定流量方向使用nload确认是入站(Incoming)还是出站(Outgoing)流量异常锁定可疑连接iftop排序显示iftop -i eth0 -nNP | sort -k3 -r关联进程信息通过端口反查进程lsof -i :6379 # 查Redis端口 ss -tulnp | grep 3306 # 查MySQL端口验证进程行为检查可疑进程的资源使用top -p $(pgrep -d, suspicious_process) strace -p 1234 -ff -o debug.log3.2 常见流量杀手排查清单数据库类# MySQL大查询检测 mysqladmin processlist # Redis大key扫描 redis-cli --bigkeys存储服务# 查找正在传输的大文件 lsof L1 | grep -i deleted # 监控NFS流量 nfsstat -c应用服务# 检测异常HTTP请求 tcpdump -i eth0 -A -s0 port 80 | grep -E GET|POST # 分析Tomcat连接 netstat -antp | grep java4. 根治方案从应急到预防4.1 临时处置措施流量限制# 限制单个IP连接数 iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 -j DROP # 限制进程带宽 trickle -d 100 -u 50 nginx服务隔离# 禁用可疑服务 systemctl stop vulnerable_service # 网络隔离 ifconfig eth0:1 down4.2 长期监控体系建设推荐监控工具栈配置# 安装基础监控组件 yum install -y sysstat dstat # 配置定时采集 echo */5 * * * * root /usr/bin/sar -n DEV 1 60 /var/log/network_stats.log /etc/cron.d/network_monitor关键监控指标阈值建议指标项警告阈值严重阈值检测命令带宽使用率70%90%vnstat -i eth0TCP连接数5k10knetstat -ant异常端口非业务端口高危端口ss -tuln4.3 自动化排查脚本示例保存为/usr/local/bin/traffic_alert.sh#!/bin/bash THRESHOLD80 # 带宽百分比阈值 INTERFACEeth0 CURRENT$(nload -t 1000 $INTERFACE -u M | grep Avg | awk {print $2} | cut -d. -f1) MAX$(ethtool $INTERFACE | grep Speed | awk {print $2} | cut -dM -f1) if [ $CURRENT -gt $(($MAX * $THRESHOLD / 100)) ]; then echo [CRITICAL] Traffic overflow detected on $INTERFACE echo TOP CONNECTIONS iftop -i $INTERFACE -nNPt -s 10 echo SUSPICIOUS PROCESSES netstat -tulnp | grep -E ([0-9]{1,3}\.){3}[0-9]{1,3} fi设置定时任务chmod x /usr/local/bin/traffic_alert.sh echo * * * * * root /usr/local/bin/traffic_alert.sh /var/log/traffic_monitor.log /etc/cron.d/traffic_monitor5. 进阶技巧与经验分享在实际运维中遇到过数据库备份脚本异常循环导致出口带宽跑满的情况。通过iftop发现大量到备份服务器的连接结合ps auxf发现是cron任务未正确设置超时时间。这提醒我们所有脚本都应设置超时退出机制重要操作添加流量限制参数定期审计cron任务和日志另一个典型案例是某次Redis未设置密码导致的挖矿程序入侵。异常特征包括出站流量持续高位连接大量非常见IP的6379端口存在异常名的进程占用CPU处置方案# 立即封禁可疑IP iptables -A INPUT -s 1.2.3.4 -j DROP # 停止Redis服务 systemctl stop redis # 清除恶意进程 pkill -f xmr-stak