云计算百科
云计算领域专业知识百科平台

Linux问题排查-引起服务器带宽使用率高的内鬼

Linux网络流量监控与瓶颈分析全攻略:从基础命令到进程级方案

一、网络带宽查询与实时流量监控

1. 查询主机网络带宽

  • 网卡理论带宽 通过ethtool命令查看网卡最大支持速率,例如:

    ethtool eth0 # 替换为实际网卡名(如ens33)

    输出中的Speed字段显示网卡速率(如1000Mb/s)。

  • 实际可用带宽测试 使用iperf3工具与远程服务器测试实际传输速率:

    iperf3 -c server_ip # 需提前安装iperf3服务端

2. 实时流量监控工具:iftop深度用法

(1)基础命令与参数

iftop -i eth0 -BnP # 监控eth0网卡,以字节为单位,不解析域名,显示端口号
iftop -f "port not 22" # 过滤规则:排除SSH端口(22)的流量

(2)界面操作与快捷键
  • 方向键:←/→切换发送/接收流量比例条,↑/↓滚动连接列表。
  • 功能键:
    • P:暂停/恢复流量更新,用于定位特定连接。
    • s:切换显示单位(字节/比特、速率/总量)。
    • l:设置过滤规则(如port 80仅显示HTTP流量)。
    • t:切换界面布局(单行/双行/三行模式)。
(3)输出字段解析

Interface: eth0 # 当前监控网卡
IP address: 192.168.1.100 # 本地IP
=> 发送流量 <= 接收流量
峰值速率: TX: 50Mb/s RX: 100Mb/s # 实时峰值
连接列表:
192.168.1.2:80 <==> 192.168.1.100:58923 # 连接两端IP:端口
2.3Mb/s 1.8Mb/s # 实时速率
10MB 8MB # 累积流量

二、判断带宽是否为瓶颈:多维指标分析

1. 网卡利用率与流量阈值

使用dstat或sar监控网卡实际流量,若持续超过理论带宽的70%(如千兆网卡长期高于700Mb/s),可能存在瓶颈:

dstat -nt 5 # 每5秒刷新,观察recv/s和send/s是否接近网卡上限
sar -n DEV 1 5 # 历史流量统计,分析趋势

2. 应用层与网络层指标

  • 延迟与卡顿:业务响应变慢、API超时增加,且CPU/内存正常时,可能是带宽不足。
  • TCP重传率:通过netstat -s查看重传次数,若重传率>1%,可能因带宽拥塞导致丢包:netstat -s | egrep 'lost|retran'

三、定位高带宽进程:从IP到PID的全链路追踪

1. 传统工具:iftop + nethogs组合

  • 通过iftop定位异常IP/端口:按P暂停更新,记录可疑连接的端口号(如远程IP:8080)。
  • 用nethogs按进程显示流量:nethogs eth0 # 直接列出各进程带宽占用,支持排序

2. 可编程方案:基于Go的进程级流量监控(go-netflow)

(1)核心原理与架构
  • 数据映射:
    • 通过/proc/net/tcp、/proc/net/udp获取TCP/UDP连接的四元组和inode。
    • 通过/proc/{pid}/fd建立inode与进程PID的映射关系。
  • 抓包分析:使用gopacket库捕获流量,解析IP/端口后,通过地址:端口→inode→PID链路关联到进程,实现流量按PID统计。
  • 缓存与性能优化:
    • 三层缓存(connInodesMap、inodePidMap、processMap)动态更新。
    • 异步处理流量数据,队列满时丢弃(采样模式),并通过Linux cgroups限制CPU/内存占用。
(2)功能特性
  • 进程级监控:显示PID、进程名、路径、实时收发速率(如java进程上传速率1.2MB/s)。
  • PCAP文件输出:支持将流量数据写入文件,供Wireshark分析。
  • 可编程接口:可集成到Prometheus等监控系统,实现自动化告警。
(3)使用示例
  • 启动监控:go run main.go -i eth0 -c 0.5 -m 1024 # 监控eth0,限制0.5核CPU、1GB内存
  • 查询进程流量(假设HTTP接口):curl http://localhost:8080/process?pid=12345
    返回结果:{
    "pid": 12345,
    "name": "data-uploader",
    "tx_rate": "48Mb/s",
    "rx_rate": "2Mb/s"
    }
  • 四、工具对比与组合实践

    工具优势场景数据粒度扩展性
    iftop 实时网卡流量监控、IP/端口级分析 网卡/IP/端口 适合人工排查
    nethogs 快速定位高流量进程(命令行工具) 进程(PID) 轻量级即用
    go-netflow 可编程接口、自动化集成 进程(PID) 适合DevOps

    典型排查流程

  • 初步诊断:用iftop发现网卡流量异常(如eth0利用率达90%),定位异常IP/端口(如192.168.1.200:443)。
  • 进程级定位:
    • 若需快速查看,用nethogs eth0直接获取进程列表。
    • 若需集成到系统,调用go-netflow接口查询对应端口的PID。
  • 优化与验证:
    • 通过tc流量控制限制进程带宽(如tc qdisc add dev eth0 root handle 1: htb default 10)。
    • 再次用iftop确认网卡利用率下降至安全范围。
  • 五、工具安装与扩展

    1. 基础工具安装

    # Ubuntu/Debian
    sudo apt-get install iftop nethogs dstat sysstat

    # CentOS/RHEL
    sudo yum install iftop nethogs dstat sysstat

    2. go-netflow部署

    git clone https://github.com/rfyiamcool/go-netflow
    cd go-netflow
    go build -o netflow
    ./netflow -h # 查看帮助文档

    通过组合使用实时监控工具与可编程方案,可构建从“流量异常发现”到“进程级定位”再到“自动化优化”的完整链路,有效解决Linux系统的网络带宽瓶颈问题。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » Linux问题排查-引起服务器带宽使用率高的内鬼
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!