当前位置: 首页 > news >正文

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. 网卡利用率与流量阈值

使用dstatsar监控网卡实际流量,若持续超过理论带宽的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统计。
  • 缓存与性能优化
    • 三层缓存(connInodesMapinodePidMapprocessMap)动态更新。
    • 异步处理流量数据,队列满时丢弃(采样模式),并通过Linux cgroups限制CPU/内存占用。
(2)功能特性
  • 进程级监控:显示PID、进程名、路径、实时收发速率(如java进程上传速率1.2MB/s)。
  • PCAP文件输出:支持将流量数据写入文件,供Wireshark分析。
  • 可编程接口:可集成到Prometheus等监控系统,实现自动化告警。
(3)使用示例
  1. 启动监控:
    go run main.go -i eth0 -c 0.5 -m 1024  # 监控eth0,限制0.5核CPU、1GB内存
    
  2. 查询进程流量(假设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

典型排查流程

  1. 初步诊断:用iftop发现网卡流量异常(如eth0利用率达90%),定位异常IP/端口(如192.168.1.200:443)。
  2. 进程级定位
    • 若需快速查看,用nethogs eth0直接获取进程列表。
    • 若需集成到系统,调用go-netflow接口查询对应端口的PID。
  3. 优化与验证
    • 通过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系统的网络带宽瓶颈问题。

相关文章:

  • 架构的设计
  • APM32小系统键盘PCB原理图设计详解
  • C语言中的弱符号 __attribute__((weak)) 的使用方法
  • asp.net web form nlog的安装
  • ARM反汇编浅析
  • Webpack 分包策略详解及实现
  • word格式相关问题
  • 网络安全之APP渗透测试总结
  • C#面:Server.UrlEncode、HttpUtility.UrlDecode的区别
  • Go语言打造:超高性能分布式唯一ID生成工具
  • 在 VB6 中强制设置 Word 文档的纸张尺寸
  • DeepSeek之RAG检索增强生成
  • 电路设计基础
  • 操作系统 第四章 -1
  • 【前端基础】12、CSS的overflow(visible、hidden、scroll、auto)【注:只有最基础的说明。】
  • 实现动态增QuartzJob,通过自定义注解调用相应方法
  • Sentinel原理与SpringBoot整合实战
  • spring-retry
  • 【springcloud核心技术站概述】
  • Dynamics 365 Business Central Azure application registration
  • 微软地球系统预报AI模型来了!点赞华为云盘古:掀起AI预报模型研发浪潮
  • 小鹏汽车一季度营收增1.4倍:预期今年销量翻倍,四季度实现盈利
  • 全力打好二季度经济回升向好的硬仗,全方位夯实耕地保护和粮食安全根基……今天的市政府常务会议研究了这些重要事项
  • 广东水利全面升级洪水和泄洪预警发布机制
  • 国家发改委:进一步完善促进民营经济发展的制度机制
  • 中疾控专家:新冠感染的临床严重性未发生显著变化