이것은 다운로드 속도를 테스트하기 위해 지루함 속에서 작성한 스크립트입니다.
#!/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 바이트를 생성하므로 kB/s를 얻기 위해 1000으로 나눕니다.
답변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 모니터링 도구 사용
이 카테고리에는 많은 도구가 있습니다. 시작하는 몇 가지 방법은 다음과 같습니다.
-
이는 뛰어난 장점을 활용합니다.속도 테스트 네트워크명령줄에서 웹사이트에 액세스합니다.
$ ./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 -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를 모두 얻을 수 있습니다.
따라서 연결 위치에 따라 속도가 달라집니다.