Linux / UNIXで現在のネットワークインターフェイスのスループット統計を取得するにはどうすればよいですか?[閉まっている]


94

MRTGなどのツールは、eth0などの特定のインターフェイスでの現在のネットワーク使用率のネットワークスループット/帯域幅グラフを提供します。Linux / UNIXのコマンドラインでその情報を返すにはどうすればよいですか?

好ましくは、これは、システムで標準で利用可能なもの以外のものをインストールすることなく行われるでしょう。


iftopの詳細を考慮して、回答を切り替えることを検討してください。
グレー

残念ながら、この質問は終了しましたbmon。これは、役立つ情報を追加したかったためです。github.com/tgraf/bmon#screenshots
ダニエルF

回答:


18

あなたはの出力を解析することができます ifconfig


これは、ルートアクセスが利用可能であることを前提としています
Lionel

20
(通常)これを実行するためにrootである必要はありません...
confiq 2012年

3
これを正確に実行する悪いbashワンライナー(そして、BSD netstat(1)の動作を長くする):while true; do export `ifconfig p1p1 | grep packets | 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; sleep 5 ;done
Jashank Jeremy

4
ifconfigの出力を解析するとエラーが発生しやすくなります。たとえば、上記の1行の結果、-bash: export: overruns:0 'が発生します。RHEL6では私にとって有効な識別子ではありません。解析/sys/class/net/$dev/statistics(@ephemient回答のperlスクリプトを参照)は、直接より効果的に機能します。
Nickolay 2016

1
エラーが発生しやすく実用的ではないため、これは受け入れられる答えではありません。仕事をもっとよくするユーティリティがあります。下にスクロールして調べてください。
エリック

156

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

iftopが「標準」かどうかはわかりませんが、yum install iftopFedora にインストールできました。


13
iftopUbuntuのクリーンインストールにも簡単にインストールできますapt-get install iftop
トムMarthenal

1
およびArch Linuxでpacman -S iftop
Benjamin Kaiser

3
ため息まあ、私はパースに学んオフ入れている。この手段を推測tcpdump再び出力を。私とこの怠惰を許してくれてありがとう、iftopそしてwireshark
パルティアンショット

1
質問はインターフェイスごとの統計情報を要求したiftopが、より詳細であり、接続ごとの統計情報を提供することに注意してください。
Joachim Breitner、2015年

1
管理者権限iftopがない場合は、インストールが必要であり(インストールしないとビルドできませんlibpcap)、そのホームページにはで実行する必要があると記載されていrootます。
Nickolay 2016

109

sarを手に入れましたか?RHEL / CentOSを使用している場合は、おそらくはい。

priv、dorkyバイナリ、hackyスクリプト、libpcapなどは必要ありません。Win。

$ 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

11
kB / sの送受信の場合:sar -n DEV 1 3 | grep $ IFACE | 尾-n1 | awk '{print $ 5、$ 6}'
ライオネル

2
@Lionel-マイナーニット:受信と送信をこの順序で意味しました。:-)
lacinato 2013年

Sarは素敵な古いツールです。それは別のバイナリまたは4つの収集用のcronjobsですが、:)
XTL

1
Centos7を実行、sarなし。
Josh Usre 2016年

google.com/webhp?q=sar%20centos%207 ... Googleをすばやく検索すると、多くの情報が表示されます。
Mike S

44

私はこの愚かなスクリプトをずっと前に書いた、それは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/statistics1秒ごとに読み取りを行い、現在の数値と平均変化率を出力します。

$ ./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 ---------^

5
すばらしいスクリプトです。ありがとうございます。
Gui13

1
「8s」と「8.8s」を「16s」と「16.16s」に置き換える必要がありました。
Nickolay 2016

私が正しく理解している場合、最終結果を正確にするために(たとえば、ライブ統計で)、/proc/net/dev毎秒実行するか、毎秒基本のデータを何らかの方法で計算する必要がありますか?
Ilia Rostovtsev

31

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で、これも簡単にapt-get'ableです。

             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ユーティリティを忘れないでください!


2
これは受け入れられる答えであるはずです
Eric

28

/ proc / net / devを解析できます。


3
/ procはすべてのUNIXに存在するわけではありません。
Mehrdad Afshari、

31
確かに、Linuxタグのせいで想定されているだけに、OPはLinuxだけに関心を持っていました。
codelogic

3.17カーネルにはそのようなファイルはありません
Tomas Tomecek

4
/sys/class/net/$dev/statisticsephemientのスクリプトのように解析と同等のようです。
Nickolay 2016

25
  • dstat -vmstat、iostat、ifstat、netstat情報などを組み合わせる
  • iftop -あなたのethで実際に起こっていることを分析する素晴らしいネットワーク帯域幅ユーティリティ
  • netio -TCP / IPを介してネットワークの正味スループットを測定します
  • inq-ストレージ、通常はSymmetrixに関する情報を表示するCLIトラブルシューティングユーティリティ。デフォルトでは、INQはデバイス名、Symmetrix ID、Symmetrix LUN、および容量を返します。
  • send_arp -指定されたネットワークデバイス(デフォルトはeth0)にarpブロードキャストを送信し、MACアドレスへの古いIPアドレスと新しいIPアドレスのマッピングを報告します。
  • EtherApe-は、ethermanをモデルにしたUnix用のグラフィカルネットワークモニターです。リンクレイヤー、IPおよびTCPモードを備え、ネットワークアクティビティをグラフィカルに表示します。
  • iptraf -ネットワークを通過するIPトラフィックに関する情報を表示するIPトラフィックモニター。

詳細:http : //felipeferreira.net/?p=1194


1
シンプルなリストに感謝し、これらはほとんどがデフォルトのユーティリティです。特に、何もインストールしなくても、iftopから非常に素晴らしいピーク帯域幅を得ることができました。
Foliovision 2016年

16

そのための別のクイック 'ダーティー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実際には1秒続くをいますが、これは事実ではありませんが、大まかな帯域幅の評価には十分です。

@ephemientに感謝し/sys/class/net/<interface>ます!:)


3
数値をMB / sでフォーマットする場合は、「echo」行を次のように置き換えます。echo $ BWRX $ BWTX | awk '{rx = $ 1/1024/1024; tx = $ 2/1024/1024; print "Received" rx "MB / s、Sent" tx "MB / s"} '
MichaelBöcklingJan

1
@BuddyCasino私はあなたが直接それを行うことができると確信していますlet BWRX=($RX-$RXPREV)/1024(私は今それをテストするものは何もありませんが)
Matthieu

あなたが正しいようです、私がそのようにしようとしたときにそれが何らかの理由でうまくいかなかったので、私はawkに落ち着きましたが、それは単なるタイプミスだったと思います。
MichaelBöckling2014年

15

iftopとiptrafに加えて、以下も確認してください。

  • bwm-ng (帯域幅モニター次世代)

および/または

  • cbm (カラー帯域幅メーター)

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


2
bwm-ng rocks:実行するのに特別な許可は必要ありません。
Rudy Matela 2013

私はすでに何年も使用していますが、ほとんどの使用例では、たとえばiftopのインターフェースよりもはるかに明確なインターフェースになっています。
Jan-Philip Gehrcke博士、2013

6

値を取得するだけの場合は、次のような単純なシェルワンライナーを使用できます。

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パラメータを、あなたが使用して代わりに受け取ったBPSの送信BPSを測定することができますtx_bytes代わりにrx_bytes)。eth0監視するネットワークデバイスに変更することを忘れないでください。

もちろん、平均レートの表示に限定されるわけではありませんが(他の回答で述べたように、より優れた出力を表示する他のツールがあります)、このソリューションは他のことを簡単にスクリプト化できます。

たとえば、次のシェルスクリプト(読みやすくするために複数の行に分割)は、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タグを選択したので問題ありません)、非古風なカーネルが必要です。シェルコード自体は/ bin / shと互換性があり(bashだけでなく、ダッシュや他の/ bin / sh実装でも機能します)、/ bin / shは常にインストールされるものです。


5

私は好きですiptrafが、おそらくあなたはそれをインストールしなければならず、それはもはやアクティブに維持されていないようです。


1
iptraf-ngがありますが、それらの違いに関する提案はありますか?
Felix Yan

1
iptraf-ngは元のプロジェクトのフォークです。それはより多くのすべての元の機能を持っている必要があります。
Rudy Matela 2013

2

私はdstatがかなり良いと思います。ただし、インストールする必要があります。必要以上の情報を提供します。Netstatはパケットレートを提供しますが、帯域幅も提供しません。netstat -s



0

AMIでパースifconfigスクリプトを機能させることができなかったので、これを機能させて、10秒間の平均受信トラフィックを測定しました

date && rxstart=`ifconfig eth0 | grep bytes | awk '{print $2}' | cut -d : -f 2` && sleep 10 && rxend=`ifconfig eth0 | grep bytes | awk '{print $2}' | cut -d : -f 2` && difference=`expr $rxend - $rxstart` && echo "Received `expr $difference / 10` bytes per sec"

申し訳ありませんが、これはとても安くて厄介ですが、うまくいきました!


0
ifconfig -a
ip -d link
ls -l /sys/class/net/ (physical and virtual devices)
route -n

json形式の(ifconfig -a)の出力が必要な場合は、これを使用できます(python)


これらのどれもスループット統計を報告しませんか?
Dzamo Norton 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.