专业接各种小工具软件及爬虫软件开发,联系Q:2391047879

简易网络带宽监控工具(使用psutil)

发布时间: 2025-03-25 14:55:29 浏览量: 本文共包含650个文字,预计阅读时间2分钟

最近在排查服务器网络异常时,发现市面上的监控工具要么功能冗余,要么配置复杂。索性用Python的psutil库自己写了个轻量级带宽监控工具,核心代码不到30行,意外地好用。

psutil这个跨平台库确实强大,三行代码就能抓取网卡信息。重点监控bytes_sent和bytes_recv这两个关键指标,它们分别对应上行和下行流量。通过计算单位时间内的字节数差值,可以准确得到实时网速。

```python

import psutil

import time

def get_network_speed(interface='eth0', interval=1):

old_stat = _io_counters(pernic=True)[interface]

time.sleep(interval)

new_stat = _io_counters(pernic=True)[interface]

return {

'upload': (new_stat.bytes_sent

  • old_stat.bytes_sent)/interval,
  • 'download': (new_stat.bytes_recv

  • old_stat.bytes_recv)/interval
  • ```

    实际测试中发现,直接输出字节数不够直观。于是增加了自动单位转换功能,根据数值大小智能切换KB/MB/GB显示。这里用到了位移运算,1024的幂次方对应不同单位层级,比循环判断更高效。

    不同操作系统下网卡命名存在差异,Windows通常是"Ethernet"或"WLAN",Linux则是"eth0""ens33"这类命名规则。为此专门写了网卡探测模块,自动列出活跃接口供用户选择。遇到VPN等虚拟网卡时,增加了流量过滤机制避免误统计。

    简易网络带宽监控工具(使用psutil)

    内存占用方面,持续运行24小时后,Python进程维持在12MB左右。这个表现比预想的要好,证明psutil的底层接口确实高效。突发流量检测是个难点,后来采用滑动窗口算法,记录最近10个采样点的数据,有效识别瞬时流量尖峰。

    数据可视化部分尝试过matplotlib绘图,但实时刷新效果不理想。最终改用终端字符画方式,用▇符号数量表示流量强度,反而获得更直观的效果。夜间低峰时段的波形图,能清楚看到心跳包产生的规律脉冲。

    实际部署时遇到个坑:在Docker容器中运行时,宿主机网卡和容器虚拟网桥的流量统计方式不同。需要特别处理veth开头的虚拟接口,否则会漏算容器对外通信的真实流量。这个问题折腾了半宿才通过tcpdump对比发现。