我想粗略估计两个Linux服务器之间的网络I / O速度。问题是我没有sudo访问服务器。所以我尝试使用scp在两台服务器之间传输1GB文件。我认为加密会有一些减速。我应该期待多少放缓? scp带宽使用量也可以由服务器管理员限制吗?我怎么知道它是否有上限?
答案 0 :(得分:6)
加密通常不是scp传输的瓶颈,但你可以使用ftp代替。
我通常的方法是使用此单一命令在某个端口上的任何目录上打开Python Web服务器
python -m SimpleHTTPServer 8000
另一方面,只需使用wget下载
wget http://[ip address]:8000/[some big file]
任何网络活动都可能受到服务器管理员的限制,通常的指标是你的速度保持在一个不错的稳定水平(例如500KB / s)
答案 1 :(得分:1)
iperf
用于网络性能测试,可在所有优秀的存储库中找到,还有大量有关使用技巧的文章。
随机使用文章:
http://www.nanog.org/meetings/nanog43/presentations/Dugan_Iperf_N43.pdf
http://maddhat.com/testing-network-performance-using-iperf-3
使用scp
或ftp
等文件传输程序会将磁盘IO作为瓶颈来源。
答案 2 :(得分:0)
我应该期望多少速度下降?加密应该不会有太大的开销。另外,此速度测试的目的是测量服务器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=.
致谢:这是我对最初发布的here脚本的修改。
#!/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