ダウンロード速度のテストのために、私が退屈に書いたスクリプトは次のとおりです。
#!/bin/bash
get_ispeed() {
echo $(ifconfig eth0 | grep bytes | grep RX | cut -d ':' -f 2 | cut -d ' ' -f 1);
}
for((;;));
do
s1=`get_ispeed`;
sleep 1s;
s2=`get_ispeed`;
d=$(($s2-$s1));
echo $(($d / 1000))" kB/s";
done
それが「仕事をしている」かどうかはわかりませんが、私は本当のベーシストではありません:p
ifconfigはRXバイトを生成するので、それを1000で割ってkB/sを取得します
私はあなたが本当にリンク速度を探しているとは思いません、これはあなたの接続の専用接続速度です。 ethtool
がインストールされている場合(リポジトリ内)、次のコマンドを使用してリンク速度を取得できます。
$ Sudo ethtool eth0 | grep -i speed
Speed: 100Mb/s
帯域幅の速度を確認したい。所定の時間内に使用している合計速度の割合。 eth0
インターフェースがバイトを読み取る方法はいくつかあります。
$ cat /sys/class/net/eth0/statistics/rx_bytes
3431530366
/proc/net/dev
もあり、これはifconfig
にデータを提供するカーネル構造であると私は考えています。
$ cat /proc/net/dev
Inter-| Receive | Transmit
face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
lo:629956414 572909 0 0 0 0 0 0 629956414 572909 0 0 0 0 0 0
eth0:3431888253 329701689 0 0 0 0 0 359127 831203319 353144288 0 0 0 0 0 0
sit0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
帯域幅の使用状況を測定するために実際のツールを使用することをお勧めします。ここには多くのオプションがあります:
wget/curlを使用
これらは非常に簡単です。大きなファイルを選択してダウンロードし、完了後にどちらかのツールから報告される統計を確認します。
$ wget --output-document=/dev/null http://speedtest.wdc01.softlayer.com/downloads/test500.Zip
-or-
$ curl -O /dev/null http://speedtest.wdc01.softlayer.com/downloads/test500.Zip
cLI監視ツールを使用する
このカテゴリには多数のツールがあります。ここにあなたを始めるためのカップルがあります。
speedtest-cli を使用します
これはコマンドラインから由緒ある speedtest.net Webサイトを利用します。
$ ./speedtest-cli
Retrieving speedtest.net configuration...
Retrieving speedtest.net server list...
Testing from Comcast Cable (x.x.x.x)...
Selecting best server based on ping...
Hosted by FiberCloud, Inc (Seattle, WA) [12.03 km]: 44.028 ms
Testing download speed........................................
Download: 32.29 Mbit/s
Testing upload speed..................................................
Upload: 5.18 Mbit/s
iperf を使用します
このために、独自のサーバーとクライアントをセットアップし、2台のコンピューター間の帯域幅パフォーマンスを測定します。これは、特定のインターネットターゲットのパフォーマンスに依存するよりも、コンピュータ/ネットワークパフォーマンスのより正確な状況を把握できるという意味で優れています。
サーバー上:
$ iperf -s
クライアント上:
$ iperf -c myserver.mydom
------------------------------------------------------------
Client connecting to 192.168.1.1, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.1.3 port 52143 connected with 192.168.1.1 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 113 MBytes 94.7 Mbits/sec
私はあなたの質問と回答に本当に同意しているので、これを実際に1行で行うことができます。
m1=`cat /sys/class/net/eth0/statistics/tx_bytes` ; sleep 10s ; m2=`cat /sys/class/net/eth0/statistics/rx_bytes` ; echo $((($m2-$m1)/10240))
そしてそれはかなりよく印刷されます。
より洗練された方法で:
#!/bin/bash
intervalo=3
info="/sys/class/net/"
cd $info
for interface in eth*
do
rx1=`cat $info$interface/statistics/rx_bytes`
tx1=`cat $info$interface/statistics/tx_bytes`
`sleep $((intervalo))s`
rx2=`cat $info$interface/statistics/rx_bytes`
tx2=`cat $info$interface/statistics/tx_bytes`
echo $interface
echo ----
echo RX: $((($rx2-$rx1)/($intervalo*1024))) Kbps
echo TX: $((($tx2-$tx1)/($intervalo*1024))) Kbps
done
これは問題なく機能しますが、配列を使用して各インターフェイスの結果を保存することで改善できるため、すべてのインターフェイスに対してスリープを実行するだけでよく、いずれか1つではスリープを実行する必要はありません。
アドバタイズされた速度とリンクの実際の速度は異なる場合があります
Sudo ethtool enp1s0
Settings for enp1s0:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
これは、リンクの両端にある両方のデバイス間でネゴシエートされた実際のリンク速度を報告します。私のラップトップのネットワークカードは、接続するローカルスイッチです。
これらのツールによって報告される実際の速度は
Sudo mii-tool enp1s0
enp1s0: negotiated 100baseTx-FD flow-control, link ok
Sudo ethtool enp1s0 | grep -i speed
Speed: 100Mb/s
同じLANに接続されているものを同じ速度でダウンロードした場合にのみ、リンク速度に到達します。
同じLAN上のサーバーからファイルをダウンロードした場合。完全な100Mb/sを取得します。
だから私が接続する場所は私が得る速度に違いを生むでしょう。