这是我无聊写的脚本,用于测试下载速度:
#!/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
不确定它是否“完成工作”,尽管我不是真正的 bashist :p
由于 ifconfig 产生 RX 字节,我将它除以 1000 以获得 kB/s
答案1
链接速度
我认为您并不是真正在寻找链接速度,这是您连接的专用连接速度。如果您已经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监控工具
此类别中有许多工具。这里有一些可以帮助您入门的方法。
使用速度测试-cli
这利用了尊贵的速度测试网从命令行访问网站。
$ ./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
为此,您将设置自己的服务器和客户端,然后测量两台计算机之间的带宽性能。从某种意义上说,与依赖特定互联网目标的性能相比,您可以更准确地了解计算机/网络性能,这是更好的选择。
在服务器上:
$ 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
参考
答案2
我真的同意你的问题和答案,因此,我真的可以用一行来完成此操作:
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
这工作得很好,但可以使用数组来保存每个接口结果来改进,因此它只需要为所有接口进行睡眠,而不需要对其中任何一个接口进行睡眠。
答案3
链接的广告速度和实际速度可能不同
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。
因此,我连接的位置将会影响我获得的速度。