How can I get the current network interface throughput statistics on Linux/UNIX? [closed] How can I get the current network interface throughput statistics on Linux/UNIX? [closed] linux linux

How can I get the current network interface throughput statistics on Linux/UNIX? [closed]


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

I don't know how "standard" iftop is, but I was able to install it with yum install iftop on Fedora.


Got sar? Likely yes if youre using RHEL/CentOS.

No need for priv, dorky binaries, hacky scripts, libpcap, etc. Win.

$ sar -n DEV 1 3Linux 2.6.18-194.el5 (localhost.localdomain)    10/27/201002:40:56 PM     IFACE   rxpck/s   txpck/s   rxbyt/s   txbyt/s   rxcmp/s   txcmp/s  rxmcst/s02:40:57 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.0002:40:57 PM      eth0  10700.00   1705.05 15860765.66 124250.51      0.00      0.00      0.0002:40:57 PM      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.0002:40:57 PM     IFACE   rxpck/s   txpck/s   rxbyt/s   txbyt/s   rxcmp/s   txcmp/s  rxmcst/s02:40:58 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.0002:40:58 PM      eth0   8051.00   1438.00 11849206.00 105356.00      0.00      0.00      0.0002:40:58 PM      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.0002:40:58 PM     IFACE   rxpck/s   txpck/s   rxbyt/s   txbyt/s   rxcmp/s   txcmp/s  rxmcst/s02:40:59 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.0002:40:59 PM      eth0   6093.00   1135.00 8970988.00  82942.00      0.00      0.00      0.0002:40:59 PM      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00Average:        IFACE   rxpck/s   txpck/s   rxbyt/s   txbyt/s   rxcmp/s   txcmp/s  rxmcst/sAverage:           lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00Average:         eth0   8273.24   1425.08 12214833.44 104115.72      0.00      0.00      0.00Average:         eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00


I wrote this dumb script a long time ago, it depends on nothing but Perl and Linux≥2.6:

#!/usr/bin/perluse 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 @_ = <>;    @_;}

It just reads from /sys/class/net/$dev/statistics every second, and prints out the current numbers and the average rate of change:

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