当前位置:  开发笔记 > 编程语言 > 正文

如何在Linux/UNIX上获取当前的网络接口吞吐量统计信息?

如何解决《如何在Linux/UNIX上获取当前的网络接口吞吐量统计信息?》经验,为你挑选了11个好方法。

诸如MRTG之类的工具为特定接口(例如eth0)上的当前网络利用率提供网络吞吐量/带宽图.如何在Linux/UNIX上的命令行中返回该信息?

优选地,除了作为标准的系统上可用的东西之外,这不会安装任何东西.



1> Philip Durbi..:

iftop does for network usage what top(1) does for CPU usage- http://www.ex-parrot.com/~pdw/iftop/

我不知道iftop是"标准"的,但我能够yum install iftop在Fedora上安装它.


`iftop`也可以很容易地安装在干净的Ubuntu上:`apt-get install iftop`.
**叹气**嗯,我想这意味着我推迟学习再次解析`tcpdump`输出.谢谢你`iftop`和`wireshark`,让我变得懒惰.

2> 小智..:

得到了什么?如果您使用RHEL/CentOS,可能是的.

不需要priv,dorky二进制文件,hacky脚本,libpcap等等.

$ sar -n DEV 1 3
Linux 2.6.18-194.el5 (localhost.localdomain)    10/27/2010

02:40:56 PM     IFACE   rxpck/s   txpck/s   rxbyt/s   txbyt/s   rxcmp/s   txcmp/s  rxmcst/s
02:40:57 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02:40:57 PM      eth0  10700.00   1705.05 15860765.66 124250.51      0.00      0.00      0.00
02:40:57 PM      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00

02:40:57 PM     IFACE   rxpck/s   txpck/s   rxbyt/s   txbyt/s   rxcmp/s   txcmp/s  rxmcst/s
02:40:58 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02:40:58 PM      eth0   8051.00   1438.00 11849206.00 105356.00      0.00      0.00      0.00
02:40:58 PM      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00

02:40:58 PM     IFACE   rxpck/s   txpck/s   rxbyt/s   txbyt/s   rxcmp/s   txcmp/s  rxmcst/s
02:40:59 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02:40:59 PM      eth0   6093.00   1135.00 8970988.00  82942.00      0.00      0.00      0.00
02:40:59 PM      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00

Average:        IFACE   rxpck/s   txpck/s   rxbyt/s   txbyt/s   rxcmp/s   txcmp/s  rxmcst/s
Average:           lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:         eth0   8273.24   1425.08 12214833.44 104115.72      0.00      0.00      0.00
Average:         eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00


对于kB/s发送和接收:sar -n DEV 1 3 | grep $ IFACE | 尾巴-n1 | awk'{print $ 5,$ 6}'
@Lionel - 次要尼特:你的意思是接收和传输,按此顺序.:-)

3> ephemient..:

我很久以前写过这个愚蠢的脚本,除了Perl和Linux≥2.6之外什么都没有:

#!/usr/bin/perl

use strict;
use warnings;

use POSIX qw(strftime);
use Time::HiRes qw(gettimeofday usleep);

my $dev = @ARGV ? shift : 'eth0';
my $dir = "/sys/class/net/$dev/statistics";
my %stats = do {
    opendir +(my $dh), $dir;
    local @_ = readdir $dh;
    closedir $dh;
    map +($_, []), grep !/^\.\.?$/, @_;
};

if (-t STDOUT) {
    while (1) {
        print "\033[H\033[J", run();
        my ($time, $us) = gettimeofday();
        my ($sec, $min, $hour) = localtime $time;
        {
            local $| = 1;
            printf '%-31.31s: %02d:%02d:%02d.%06d%8s%8s%8s%8s',
            $dev, $hour, $min, $sec, $us, qw(1s 5s 15s 60s)
        }
        usleep($us ? 1000000 - $us : 1000000);
    }
}
else {print run()}

sub run {
    map {
        chomp (my ($stat) = slurp("$dir/$_"));
        my $line = sprintf '%-31.31s:%16.16s', $_, $stat;
        $line .= sprintf '%8.8s', int (($stat - $stats{$_}->[0]) / 1)
            if @{$stats{$_}} > 0;
        $line .= sprintf '%8.8s', int (($stat - $stats{$_}->[4]) / 5)
            if @{$stats{$_}} > 4;
        $line .= sprintf '%8.8s', int (($stat - $stats{$_}->[14]) / 15)
            if @{$stats{$_}} > 14;
        $line .= sprintf '%8.8s', int (($stat - $stats{$_}->[59]) / 60)
            if @{$stats{$_}} > 59;
        unshift @{$stats{$_}}, $stat;
        pop @{$stats{$_}} if @{$stats{$_}} > 60;
        "$line\n";
    } sort keys %stats;
}

sub slurp {
    local @ARGV = @_;
    local @_ = <>;
    @_;
}

它只是从/sys/class/net/$dev/statistics每秒读取,并打印出当前数字和平均变化率:

$ ./net_stats.pl eth0
rx_bytes                       :  74457040115259 4369093 4797875 4206554 364088
rx_packets                     :     91215713193   23120   23502   23234  17616
...
tx_bytes                       :  90798990376725 8117924 7047762 7472650 319330
tx_packets                     :     93139479736   23401   22953   23216  23171
...
eth0                           : 15:22:09.002216      1s      5s     15s     60s

                                ^ current reading  ^-------- averages ---------^


这是一个很棒的小脚本,谢谢你!

4> Jamieson Bec..:

nload是一个很好的工具,用于实时监控带宽,并使用sudo apt-get install nload轻松安装在Ubuntu或Debian中.

Device eth0 [10.10.10.5] (1/2):
=====================================================================================
Incoming:


                               .         ...|    
                               #         ####|   
                           .. |#|  ...   #####.         ..          Curr: 2.07 MBit/s
                          ###.###  #### #######|.     . ##      |   Avg: 1.41 MBit/s
                         ########|#########################.   ###  Min: 1.12 kBit/s
             ........    ###################################  .###  Max: 4.49 MBit/s
           .##########. |###################################|#####  Ttl: 1.94 GByte
Outgoing:
            ##########  ###########    ###########################
            ##########  ###########    ###########################
            ##########. ###########   .###########################
            ########### ###########  #############################
            ########### ###########..#############################
           ############ ##########################################
           ############ ##########################################
           ############ ##########################################  Curr: 63.88 MBit/s
           ############ ##########################################  Avg: 32.04 MBit/s
           ############ ##########################################  Min: 0.00 Bit/s
           ############ ##########################################  Max: 93.23 MBit/s
         ############## ##########################################  Ttl: 2.49 GByte

另一个优秀的工具是iftop,也很容易获得:

             191Mb      381Mb                 572Mb       763Mb             954Mb     
?????????????????????????????????????????????????????????????????????????????????
box4.local            => box-2.local                      91.0Mb  27.0Mb  15.1Mb
                      <=                                  1.59Mb   761kb   452kb
box4.local            => box.local                         560b   26.8kb  27.7kb
                      <=                                   880b   31.3kb  32.1kb
box4.local            => userify.com                         0b   11.4kb  8.01kb
                      <=                                  1.17kb  2.39kb  1.75kb
box4.local            => b.resolvers.Level3.net              0b     58b    168b
                      <=                                     0b     83b    288b
box4.local            => stackoverflow.com                   0b     42b     21b
                      <=                                     0b     42b     21b
box4.local            => 224.0.0.251                         0b      0b    179b
                      <=                                     0b      0b      0b
224.0.0.251           => box-2.local                         0b      0b      0b
                      <=                                     0b      0b     36b
224.0.0.251           => box.local                           0b      0b      0b
                      <=                                     0b      0b     35b


?????????????????????????????????????????????????????????????????????????????????
TX:           cum:   37.9MB   peak:   91.0Mb     rates:   91.0Mb  27.1Mb  15.2Mb
RX:                  1.19MB           1.89Mb              1.59Mb   795kb   486kb
TOTAL:               39.1MB           92.6Mb              92.6Mb  27.9Mb  15.6Mb

不要忘记旧版*nix上经典而强大的sar和netstat实用程序!


这应该是公认的答案

5> codelogic..:

你可以解析/ proc/net/dev.


是的,只是假设由于Linux标签,OP只对Linux感兴趣.
似乎等同于在ephemient的脚本中解析`/ sys/class/net/$ dev/statistics`.
/ proc在每个UNIX上都不存在.

6> 小智..:

dstat - 结合vmstat,iostat,ifstat,netstat信息等

iftop - 惊人的网络带宽实用程序,用于分析您的eth上发生的事情

netio - 通过TCP/IP测量网络的净吞吐量

inq - CLI故障排除实用程序,显示存储信息,通常为Symmetrix.默认情况下,INQ返回设备名称,Symmetrix ID,Symmetrix LUN和容量.

send_arp - 在指定的网络设备上发送arp广播(默认为eth0),报告旧的和新的IP地址映射到MAC地址.

EtherApe - 是针对以太网建模的Unix的图形网络监视器.它具有链路层,IP和TCP模式,以图形方式显示网络活动.

iptraf - IP流量监视器,显示有关通过网络传输的IP流量的信息.

更多细节:http: //felipeferreira.net/?p = 1194



7> Mehrdad Afsh..:

你可以解析输出 ifconfig


(通常)你不需要是root来运行这个...
/ sbin目录/使用ifconfig?
一个糟糕的bash one-liner正是这样做的(并且让我渴望BSD netstat(1)行为):`while true; 导出\`ifconfig p1p1 | grep数据包| awk'{print $ 5,$ 3}'| xargs echo | sed -E -e"s /([0-9] +)([0-9] +)([0-9] +)([0-9] +)/ rx =\1 rxp =\2 tx =\3 txp =\4 /"\`; echo $ rx $ rxp $ tx $ txp \`cat/tmp/netstat \`| awk'{print $ 1- $ 5,$ 2- $ 6,$ 3- $ 7,$ 4- $ 8}'; echo $ rx $ rxp $ tx $ txp>/tmp/netstat; 睡觉5;完成
解析ifconfig输出容易出错,例如上面的单行导致`-bash:export:`overruns:0':在RHEL6上对我来说不是有效的标识符.解析`/ sys/class/net/$ dev/statistics`(参见@ephemient答案中的perl脚本)直接效果更好.

8> Matthieu..:

我得到了另一个quick'n'dirty bash脚本:

#!/bin/bash
IF=$1
if [ -z "$IF" ]; then
        IF=`ls -1 /sys/class/net/ | head -1`
fi
RXPREV=-1
TXPREV=-1
echo "Listening $IF..."
while [ 1 == 1 ] ; do
        RX=`cat /sys/class/net/${IF}/statistics/rx_bytes`
        TX=`cat /sys/class/net/${IF}/statistics/tx_bytes`
        if [ $RXPREV -ne -1 ] ; then
                let BWRX=$RX-$RXPREV
                let BWTX=$TX-$TXPREV
                echo "Received: $BWRX B/s    Sent: $BWTX B/s"
        fi
        RXPREV=$RX
        TXPREV=$TX
        sleep 1
done

它正在考虑sleep 1实际上将持续一秒钟,这不是真的,但足以进行粗略的带宽评估.

感谢@ephemient /sys/class/net/!:)


如果要将数字格式化为MB/s,请将"echo"行替换为:echo $ BWRX $ BWTX | awk'{rx = $ 1/1024/1024; tx = $ 2/1024/1024; 打印"已收到"rx"MB/s,已发送"tx"MB/s"}'

9> 小智..:

除了iftop和iptraf,还要检查:

bwm-ng (下一代带宽监视器)

和/或

cbm (彩色带宽计)

参考:http://www.powercram.com/2010/01/bandwidth-monitoring-tools-for-ubuntu.html


bwm-ng rocks:它不需要任何特殊的权限来运行.

10> Matija Nalis..:

如果你只想得到这个值,你可以像这样使用简单的shell oneliner:

S=10; F=/sys/class/net/eth0/statistics/rx_bytes; X=`cat $F`; sleep $S; Y=`cat $F`; BPS="$(((Y-X)/S))"; echo $BPS

它将显示10秒的平均"每秒接收字节数"(您可以通过更改S=10参数来更改周期,并且您可以通过使用tx_bytes而不是来测量传输的BPS而不是接收的BPS rx_bytes).不要忘记更改eth0为要监控的网络设备.

当然,您不仅限于显示平均速率(如其他答案中所述,还有其他工具可以显示更好的输出),但此解决方案可以轻松编写脚本以执行其他操作.

例如,以下shell脚本(为了便于阅读而分成多行)只有在5分钟平均传输速度降至10kBPS以下时才会执行offlineimap进程(可能是在其他一些耗费带宽的进程完成时):

#!/bin/sh
S=300; F=/sys/class/net/eth0/statistics/tx_bytes
BPS=999999
while [ $BPS -gt 10000 ]
do
  X=`cat $F`; sleep $S; Y=`cat $F`; BPS="$(((Y-X)/S))";
  echo BPS is currently $BPS
done
offlineimap

请注意,这/sys/class/...是Linux特定的(这是提交者确实选择linux标记的确定),并且需要非古老的内核.Shell代码本身是/ bin/sh兼容的(所以不仅bash,而且dash和其他/ bin/sh实现都可以工作)和/ bin/sh是真正总是安装的东西.



11> Johannes Wei..:

我喜欢,iptraf但你可能必须安装它,似乎不再积极维护.

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有