【问题标题】:Live RX and TX rates in linuxLinux 中的实时 RX 和 TX 速率
【发布时间】:2009-07-13 14:12:37
【问题描述】:

我正在寻找一种以编程方式(无论是调用库还是独立程序)监控 Linux 中实时 IP 流量的方法。我不想要总数,我想要正在使用的当前带宽。我正在寻找与 OS X 的 istat 菜单的网络流量监视器类似(但非图形)的工具。

我相当确定存在这样的东西,但我不确定该去哪里寻找,我宁愿不必重新发明轮子。

是否像监控套接字一样简单?还是我需要一个可以为我处理大量开销的实用程序?

【问题讨论】:

    标签: c++ python c


    【解决方案1】:

    我们在 /proc/net/dev 中有字节和数据包计数器,所以:

    import time
    
    last={}
    
    def diff(col): return counters[col] - last[iface][col]
    
    while True:
      print "\n%10s: %10s %10s %10s %10s"%("interface","bytes recv","bytes sent", "pkts recv", "pkts sent")
      for line in open('/proc/net/dev').readlines()[2:]:
        iface, counters = line.split(':')
        counters = map(int,counters.split())
        if iface in last:
          print "%10s: %10d %10d %10d %10d"%(iface,diff(0), diff(8), diff(1), diff(9))
    
        last[iface] = counters
    
      time.sleep(1)
    

    【讨论】:

    • 在 2.6 内核上,/sys/class/net/$dev/statistics 中有更详细的每设备统计信息
    【解决方案2】:

    我使用了一个名为dstat 的小程序,它将许多类似“stat”的函数组合成一个快速输出。非常可定制。它将为您提供当前的网络吞吐量以及更多。

    在 linux 中,netstat 程序将为您提供原始网络统计信息。您可以自己解析这些统计信息以产生有意义的输出(这就是 dstat 所做的)。

    【讨论】:

      【解决方案3】:

      您可以使用以下dstat 命令获取网络吞吐量和数据包计数:

      dstat -n --net-packets -f 10
      

      或者如果你想监控特定的接口,你可以这样做:

      dstat -n --net-packets -N eth0,wlan0 10
      

      如果您更喜欢更传统的bits per second 输出:

      dstat -n --net-packets -N eth0,wlan0 --bits 10
      

      这将为您提供 10 秒的平均值。如果您希望将其写出来以进行后处理,可以使用以下命令导出到 CSV 文件:

      dstat -n --net-packets -N eth0,wlan0 --bits 10
      

      Dstat 附带了许多插件来将这些指标与系统中的其他指标相关联,如果您需要自定义数据或监控特定于您的环境的某些内容,它使您可以灵活地添加自己的 (python) 插件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-11-11
        • 2021-06-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多