使用 scp 估算网络 I/O 速度

问题描述 投票:0回答:3

我想粗略估计两台Linux服务器之间的网络I/O速度。问题是我没有 sudo 访问服务器的权限。所以我尝试使用 scp 在两台服务器之间传输 1GB 文件。我想通过加密,速度会有所下降。我应该预期减速多少?服务器管理员也可以限制 scp 带宽使用吗?我怎么知道是否有上限?

linux bandwidth scp
3个回答
10
投票

加密通常不是 scp 传输的瓶颈,但您可以使用 ftp 代替。

我通常的方法是使用这个命令在某个端口的任何目录上打开Python Web服务器

python -m SimpleHTTPServer 8000  # python 2
python -m http.server 8000 # python 3

另一边只需使用 wget 即可下载

wget http://[ip address]:8000/[some big file]

任何网络活动都可能受到服务器管理员的限制,通常的指标是您的速度保持在一个很好的稳定水平(例如 500KB/s)


3
投票

iperf
用于网络性能测试,可在所有好的存储库中找到,并且有大量有关使用技巧的文章。

http://iperf.sourceforge.net/

随机使用文章:

http://www.nanog.org/meetings/nanog43/presentations/Dugan_Iperf_N43.pdf

http://maddhat.com/testing-network-performance-using-iperf-3

使用

scp
ftp
等文件传输程序会带来磁盘IO作为瓶颈源。


1
投票

我应该期待多少速度减慢?加密不应该有太多开销。此外,此速度测试的目的是测量服务器到服务器的 I/O 性能,因此您是否不希望它反映典型的通信类型(即加密)?

服务器管理员也可以限制 scp 带宽使用吗?我如何知道它是否受到限制? 是的,这在网络的各个层都是可能的。例如,在路由器级别使用

tc
(例如 here)。如果您拥有
sudo
权限,您可以检查
tc
限制是否到位。否则,您可以尝试使用不同的机器,没有限制,看看速度是否不同。如果它是在路由器级别完成的,您就没有简单的方法可以知道。

这是一个 bash 脚本,它将 1) 检查服务器是否可访问,2) 创建给定大小的文件,3) 使用

scp
测量上传和可选下载速率,4) 本地和远程删除文件.

speed_test.sh --server=1.2.3.4 --test_size=128 --do_download=1 --server_dir=.

一样使用它

信用说明:这是我对最初发布的脚本的修改这里

#!/bin/bash

test_file=".scp-test-file"

# usage function
function usage()
{
   cat << HEREDOC
   Usage: $progname --server=<ip address> [--test_size=<MB> --do_download=<0/1> --server_dir=<server side dir>]
   optional arguments:
     -h, --help           show this help message and exit
HEREDOC
}

# initialize variables and defaults
progname=$(basename $0)
server=
server_dir=./
do_download=1
test_size=10

###
# all args
L=(server \
do_download \
test_size \
server_dir)

arg_parse_str="help"
for arg in "${L[@]}"; do
    arg_parse_str=${arg_parse_str},${arg}:
done
#echo $arg_parse_str

OPTS=$(getopt -o "h" --long ${arg_parse_str} -n "$progname" -- "$@")
if [ $? != 0 ] ; then echo "Error in command line arguments." >&2 ; usage; exit 1 ; fi
eval set -- "$OPTS"

while true; do
  # uncomment the next line to see how shift is working
  # echo "\$1:\"$1\" \$2:\"$2\""
  case "$1" in
    -h | --help ) usage; exit; ;;
    -- ) shift; break ;;
  esac
  found=
  for arg in "${L[@]}"; do
    if [ "$1" == "--$arg" ]; then
        declare ${arg}="$2";
        shift 2;
        found=1
        break
    fi
  done
  if [ -z "$found" ]; then
    break
  fi
done

if [ -z "$server" ]
then
    usage;
    exit;
fi

#[[ -z $(nc -W 1 -w 10 $server 22 2>/dev/null) ]] && echo "$server unreachable" && exit 0
#if your nc complains about not having -i command line option then use the line above
[[ -z $(nc -i 1 -w 10 $server 22 2>/dev/null) ]] && echo "$server unreachable" && exit 0


# generate a file of all zeros
echo "Generating $test_size MB test file..."
dd if=/dev/zero of=$test_file bs=$(echo "$test_size*1024*1024" | bc) \
  count=1 &> /dev/null
# upload test

echo "Testing upload to $server..."
up_speed=$(scp -v -o 'Compression no' -o 'StrictHostKeyChecking no' $test_file $server:$server_dir/$test_file 2>&1 | \
  grep "Bytes per second" | \
  sed "s/^[^0-9]*\([0-9.]*\)[^0-9]*\([0-9.]*\).*$/\1/g")
up_speed=$(echo "($up_speed/1000)" | bc)
echo "Upload speed:   $up_speed KBps on $server"

if [ "$do_download" == "1" ]; then
    # download test
    echo "Testing download from $server..."
    down_speed=$(scp -v -o 'Compression no' -o 'StrictHostKeyChecking no' $server:$server_dir/$test_file $test_file 2>&1 | \
      grep "Bytes per second" | \
      sed "s/^[^0-9]*\([0-9.]*\)[^0-9]*\([0-9.]*\).*$/\2/g")
    down_speed=$(echo "($down_speed/1000)" | bc)
    echo "Download speed: $down_speed KBps on $server"
fi

# clean up
echo "Removing test file, $server:$server_dir/$test_file..."
ssh $server "rm $server_dir/$test_file"
echo "Removing test file locally..."
rm $test_file
© www.soinside.com 2019 - 2024. All rights reserved.