【问题标题】:Results from measuring network usage with psutil and ethtool使用 psutil 和 ethtool 测量网络使用情况的结果
【发布时间】:2020-07-13 12:31:15
【问题描述】:

我有一个消耗大量网络流量的应用程序。我使用 psutil 以 kbits 为单位测量网络活动,代码如下:

old_value = psutil.net_io_counters(nowrap=True).bytes_sent + psutil.net_io_counters(nowrap=True).bytes_recv
sleep(1)

while True:
    new_value = psutil.net_io_counters(nowrap=True).bytes_sent + psutil.net_io_counters(nowrap=True).bytes_recv
    net_usage = (new_value - old_value)/1024.0 * 8
    old_value = new_value

    print(net_usage)
    sleep(1)

在此之前,我使用以下命令将网络限制为 10Mbps:

ethtool -s eth0 speed 10 duplex full autoneg off

我希望看到一个接近 10000kbit 的数字列表,但这些数字显然受到接近 ~6380 的数字的限制:

对此有解释吗? IE。为什么限制不是 10000,即使数字明显受到 ethtool 的限制?我的测量代码或期望是否存在某种缺陷?

编辑:我的应用程序主要使用网络上传数据。是否有可能 ethtool 将 10Mbit 的限制分为上传和下载方向,而上传仅分配 6.4Mbit?

【问题讨论】:

  • 您的网络带宽是多少?您确定本地 NIC 是限制因素吗?
  • 这是本地 1Gbps 网络上的通信。如果没有 ethtool 命令,使用率显然更高。仅在应用 ethtool 命令后才存在 ~6k 限制。

标签: python-3.x usage-statistics psutil network-traffic


【解决方案1】:

你应该把“time.sleep(1)”放在旧值和新值之间。

【讨论】:

  • 那是错误的。如果您考虑循环的工作原理,则始终会在相隔 1 秒的值之间计算差异。
【解决方案2】:

这可能是网络问题,我通过将“autoeg”设置为“on”解决了这个问题。因此,正确的命令是:

ethtool -s eth0 speed 10 duplex full autoneg on

有了这个,我看到了接近 10000 的值列表。

无论如何,对此行为的任何解释仍将不胜感激。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    • 2020-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多