zoukankan      html  css  js  c++  java
  • 一键测试VPS到国内速度脚本 SuperBench.sh,以及一键验收云主机脚本

    我们买国外VPS服务器测试网络通常会用到speedtest,speedtest默认是测试到最近的节点,那么到国内速度如何呢?虽然可以指定服务器编号,但是一个个测试还是比较麻烦的,这里推荐一个脚本整合了几个国内的测试点,还是比较方便的。Superspeed已更新为SuperBench.sh,整合了teddysun 大佬的 bench.sh 脚本。

    更新

    1. 新增 Virt 检测服务器类型参数,常见 openvz,kvm,独服都能检测出来
    2. 新增独服通电时间检测。
    3. 修复,speedtest 延迟飘逸,飘逸延迟统一改为 000.000 ms
    4. 修改 I/O 测试块大小
    5. 统一字符为英文,解决乱码问题

    一、使用方法

        1、直接在线下载安装测试

    wget -qO- git.io/superbench_old.sh | bash
    

     

      2、也可以复制这个脚本内粘贴然后保存

    #!/usr/bin/env bash
    #
    # Description: Auto test download & I/O speed & network to China script
    #
    # Copyright (C) 2017 - 2017 Oldking <oooldking@gmail.com>
    #
    # Thanks: Bench.sh <i@teddysun.com>
    #
    # URL: https://www.oldking.net/350.html
    #
    
    # Colors
    RED='33[0;31m'
    GREEN='33[0;32m'
    YELLOW='33[0;33m'
    SKYBLUE='33[0;36m'
    PLAIN='33[0m'
    
    # check release
    if [ -f /etc/redhat-release ]; then
        release="centos"
    elif cat /etc/issue | grep -Eqi "debian"; then
        release="debian"
    elif cat /etc/issue | grep -Eqi "ubuntu"; then
        release="ubuntu"
    elif cat /etc/issue | grep -Eqi "centos|red hat|redhat"; then
        release="centos"
    elif cat /proc/version | grep -Eqi "debian"; then
        release="debian"
    elif cat /proc/version | grep -Eqi "ubuntu"; then
        release="ubuntu"
    elif cat /proc/version | grep -Eqi "centos|red hat|redhat"; then
        release="centos"
    fi
    
    # check root
    [[ $EUID -ne 0 ]] && echo -e "${RED}Error:${PLAIN} This script must be run as root!" && exit 1
    
    # check python
    if  [ ! -e '/usr/bin/python' ]; then
            #echo -e
            #read -p "${RED}Error:${PLAIN} python is not install. You must be install python command at first.
    Do you want to install? [y/n]" is_install
            #if [[ ${is_install} == "y" || ${is_install} == "Y" ]]; then
                if [ "${release}" == "centos" ]; then
                            yum update > /dev/null 2>&1
                            yum -y install python
                    else
                            apt-get update > /dev/null 2>&1
                            apt-get -y install python
                    fi
            #else
            #    exit
            #fi
            
    fi
    
    # check wget
    if  [ ! -e '/usr/bin/wget' ]; then
            #echo -e
            #read -p "${RED}Error:${PLAIN} wget is not install. You must be install wget command at first.
    Do you want to install? [y/n]" is_install
            #if [[ ${is_install} == "y" || ${is_install} == "Y" ]]; then
                    if [ "${release}" == "centos" ]; then
                            yum update > /dev/null 2>&1
                            yum -y install wget
                    else
                            apt-get update > /dev/null 2>&1
                            apt-get -y install wget
                    fi
            #else
            #        exit
            #fi
    fi
    
    get_opsy() {
        [ -f /etc/redhat-release ] && awk '{print ($1,$3~/^[0-9]/?$3:$4)}' /etc/redhat-release && return
        [ -f /etc/os-release ] && awk -F'[= "]' '/PRETTY_NAME/{print $3,$4,$5}' /etc/os-release && return
        [ -f /etc/lsb-release ] && awk -F'[="]+' '/DESCRIPTION/{print $2}' /etc/lsb-release && return
    }
    
    next() {
        printf "%-70s
    " "-" | sed 's/s/-/g'
    }
    
    speed_test(){
        if [[ $1 == '' ]]; then
            temp=$(python /tmp/speedtest.py --share 2>&1)
            is_down=$(echo "$temp" | grep 'Download') 
            if [[ ${is_down} ]]; then
                local REDownload=$(echo "$temp" | awk -F ':' '/Download/{print $2}')
                local reupload=$(echo "$temp" | awk -F ':' '/Upload/{print $2}')
                local relatency=$(echo "$temp" | awk -F ':' '/Hosted/{print $2}')
                local nodeName=$2
    
                printf "${YELLOW}%-17s${GREEN}%-18s${RED}%-20s${SKYBLUE}%-12s${PLAIN}
    " "${nodeName}" "${reupload}" "${REDownload}" "${relatency}"
            else
                local cerror="ERROR"
            fi
        else
            temp=$(python /tmp/speedtest.py --server $1 --share 2>&1)
            is_down=$(echo "$temp" | grep 'Download') 
            if [[ ${is_down} ]]; then
                local REDownload=$(echo "$temp" | awk -F ':' '/Download/{print $2}')
                local reupload=$(echo "$temp" | awk -F ':' '/Upload/{print $2}')
                local relatency=$(echo "$temp" | awk -F ':' '/Hosted/{print $2}')
                temp=$(echo "$relatency" | awk -F '.' '{print $1}')
                if [[ ${temp} -gt 1000 ]]; then
                    relatency=" 000.000 ms"
                fi
                local nodeName=$2
    
                printf "${YELLOW}%-17s${GREEN}%-18s${RED}%-20s${SKYBLUE}%-12s${PLAIN}
    " "${nodeName}" "${reupload}" "${REDownload}" "${relatency}"
            else
                local cerror="ERROR"
            fi
        fi
    }
    
    speed() {
        # install speedtest
        if  [ ! -e '/tmp/speedtest.py' ]; then
            wget --no-check-certificate -P /tmp https://raw.github.com/sivel/speedtest-cli/master/speedtest.py > /dev/null 2>&1
        fi
        chmod a+rx /tmp/speedtest.py
    
        speed_test '' 'Normal Node'
        speed_test '6435' 'Xiangyang CT'
        speed_test '7509' 'Kunming   CT'
        speed_test '3633' 'Shanghai  CT'
        speed_test '4624' 'Chengdu   CT'
        speed_test '5017' 'Shenyang  CU'
        speed_test '4863' "Xi'an     CU"
        speed_test '5083' 'Shanghai  CU'
        speed_test '5726' 'Chongqing CU'
        speed_test '5292' "Xi'an     CM"
        speed_test '16314' 'Shandong  CM'
        speed_test '6715' 'Ningbo    CM'
        speed_test '4575' 'Chengdu   CM'
         
        rm -rf /tmp/speedtest.py
    }
    
    
    io_test() {
        (LANG=C dd if=/dev/zero of=test_$$ bs=$1 count=$2 conv=fdatasync && rm -f test_$$ ) 2>&1 | awk -F, '{io=$NF} END { print io}' | sed 's/^[ 	]*//;s/[ 	]*$//'
    }
    
    calc_disk() {
        local total_size=0
        local array=$@
        for size in ${array[@]}
        do
            [ "${size}" == "0" ] && size_t=0 || size_t=`echo ${size:0:${#size}-1}`
            [ "`echo ${size:(-1)}`" == "K" ] && size=0
            [ "`echo ${size:(-1)}`" == "M" ] && size=$( awk 'BEGIN{printf "%.1f", '$size_t' / 1024}' )
            [ "`echo ${size:(-1)}`" == "T" ] && size=$( awk 'BEGIN{printf "%.1f", '$size_t' * 1024}' )
            [ "`echo ${size:(-1)}`" == "G" ] && size=${size_t}
            total_size=$( awk 'BEGIN{printf "%.1f", '$total_size' + '$size'}' )
        done
        echo ${total_size}
    }
    
    power_time() {
    
        result=$(smartctl -a $(result=$(cat /proc/mounts) && echo $(echo "$result" | awk '/data=ordered/{print $1}') | awk '{print $1}') 2>&1) && power_time=$(echo "$result" | awk '/Power_On/{print $10}') && echo "$power_time"
    }
    
    install_smart() {
        # install smartctl
        if  [ ! -e '/usr/sbin/smartctl' ]; then
            if [ "${release}" == "centos" ]; then
                yum update > /dev/null 2>&1
                yum -y install smartmontools > /dev/null 2>&1
            else
                apt-get update > /dev/null 2>&1
                apt-get -y install smartmontools > /dev/null 2>&1
            fi      
        fi
    }
    
    start=$(date +%s) 
    
    cname=$( awk -F: '/model name/ {name=$2} END {print name}' /proc/cpuinfo | sed 's/^[ 	]*//;s/[ 	]*$//' )
    cores=$( awk -F: '/model name/ {core++} END {print core}' /proc/cpuinfo )
    freq=$( awk -F: '/cpu MHz/ {freq=$2} END {print freq}' /proc/cpuinfo | sed 's/^[ 	]*//;s/[ 	]*$//' )
    tram=$( free -m | awk '/Mem/ {print $2}' )
    uram=$( free -m | awk '/Mem/ {print $3}' )
    swap=$( free -m | awk '/Swap/ {print $2}' )
    uswap=$( free -m | awk '/Swap/ {print $3}' )
    up=$( awk '{a=$1/86400;b=($1%86400)/3600;c=($1%3600)/60} {printf("%d days %d hour %d min
    ",a,b,c)}' /proc/uptime )
    load=$( w | head -1 | awk -F'load average:' '{print $2}' | sed 's/^[ 	]*//;s/[ 	]*$//' )
    opsy=$( get_opsy )
    arch=$( uname -m )
    lbit=$( getconf LONG_BIT )
    kern=$( uname -r )
    ipv6=$( wget -qO- -t1 -T2 ipv6.icanhazip.com )
    disk_size1=($( LANG=C df -hPl | grep -wvE '-|none|tmpfs|devtmpfs|by-uuid|chroot|Filesystem' | awk '{print $2}' ))
    disk_size2=($( LANG=C df -hPl | grep -wvE '-|none|tmpfs|devtmpfs|by-uuid|chroot|Filesystem' | awk '{print $3}' ))
    disk_total_size=$( calc_disk ${disk_size1[@]} )
    disk_used_size=$( calc_disk ${disk_size2[@]} )
    ptime=$(power_time)
    
    
    clear
    next
    echo -e "CPU model            : ${SKYBLUE}$cname${PLAIN}"
    echo -e "Number of cores      : ${SKYBLUE}$cores${PLAIN}"
    echo -e "CPU frequency        : ${SKYBLUE}$freq MHz${PLAIN}"
    echo -e "Total size of Disk   : ${SKYBLUE}$disk_total_size GB ($disk_used_size GB Used)${PLAIN}"
    echo -e "Total amount of Mem  : ${SKYBLUE}$tram MB ($uram MB Used)${PLAIN}"
    echo -e "Total amount of Swap : ${SKYBLUE}$swap MB ($uswap MB Used)${PLAIN}"
    echo -e "System uptime        : ${SKYBLUE}$up${PLAIN}"
    echo -e "Load average         : ${SKYBLUE}$load${PLAIN}"
    echo -e "OS                   : ${SKYBLUE}$opsy${PLAIN}"
    echo -e "Arch                 : ${SKYBLUE}$arch ($lbit Bit)${PLAIN}"
    echo -e "Kernel               : ${SKYBLUE}$kern${PLAIN}"
    echo -ne "Virt                 : "
    
    # install virt-what
    if  [ ! -e '/usr/sbin/virt-what' ]; then
        if [ "${release}" == "centos" ]; then
            yum update > /dev/null 2>&1
            yum -y install virt-what > /dev/null 2>&1
        else
            apt-get update > /dev/null 2>&1
            apt-get -y install virt-what > /dev/null 2>&1
        fi      
    fi
    virtua=$(virt-what) 2>/dev/null
    
    if [[ ${virtua} ]]; then
        echo -e "${SKYBLUE}$virtua${PLAIN}"
    else
        echo -e "${SKYBLUE}No Virt${PLAIN}"
        echo -ne "Power time of disk   : "
        install_smart
        echo -e "${SKYBLUE}$ptime Hours${PLAIN}"
    fi
    next
    echo -n "I/O speed( 32M )     : "
    io1=$( io_test 32k 1k )
    echo -e "${YELLOW}$io1${PLAIN}"
    echo -n "I/O speed( 256M )    : "
    io2=$( io_test 64k 4k )
    echo -e "${YELLOW}$io2${PLAIN}"
    echo -n "I/O speed( 2G )      : "
    io3=$( io_test 64k 32k )
    echo -e "${YELLOW}$io3${PLAIN}"
    ioraw1=$( echo $io1 | awk 'NR==1 {print $1}' )
    [ "`echo $io1 | awk 'NR==1 {print $2}'`" == "GB/s" ] && ioraw1=$( awk 'BEGIN{print '$ioraw1' * 1024}' )
    ioraw2=$( echo $io2 | awk 'NR==1 {print $1}' )
    [ "`echo $io2 | awk 'NR==1 {print $2}'`" == "GB/s" ] && ioraw2=$( awk 'BEGIN{print '$ioraw2' * 1024}' )
    ioraw3=$( echo $io3 | awk 'NR==1 {print $1}' )
    [ "`echo $io3 | awk 'NR==1 {print $2}'`" == "GB/s" ] && ioraw3=$( awk 'BEGIN{print '$ioraw3' * 1024}' )
    ioall=$( awk 'BEGIN{print '$ioraw1' + '$ioraw2' + '$ioraw3'}' )
    ioavg=$( awk 'BEGIN{printf "%.1f", '$ioall' / 3}' )
    echo -e "Average I/O speed    : ${YELLOW}$ioavg MB/s${PLAIN}"
    next
    printf "%-18s%-18s%-20s%-12s
    " "Node Name" "Upload Speed" "Download Speed" "Latency"
    speed && next
    end=$(date +%s) 
    time=$(( $end - $start ))
    if [[ $time -gt 60 ]]; then
        min=$(expr $time / 60)
        sec=$(expr $time % 60)
        echo -ne "Total time   : ${min} min ${sec} sec"
    else
        echo -ne "Total time   : ${time} sec"
    fi
    echo -ne "
    Current time : "
    echo $(date +%Y-%m-%d" "%H:%M:%S)
    echo "Finished!"
    View Code

    二、测试结果

    备注:

    此 bench 默认从官方源安装 Python (一般情况下系统默认自带了Python),除了结果之外其他产生文件均在测试后删除,中途打断测试也会清理垃圾文件,对系统无更改,无残留,适合洁癖者使用。

    原文地址:https://www.oldking.net/350.html

    我们买国外VPS服务器测试网络通常会用到speedtest,speedtest默认是测试到最近的节点,那么到国内速度如何呢?虽然可以指定服务器编号,但是一个个测试还是比较麻烦的,这里推荐一个脚本整合了几个国内的测试点,还是比较方便的。Superspeed已更新为SuperBench.sh,整合了teddysun 大佬的 bench.sh 脚本。

    更新

    1. 新增 Virt 检测服务器类型参数,常见 openvz,kvm,独服都能检测出来
    2. 新增独服通电时间检测。
    3. 修复,speedtest 延迟飘逸,飘逸延迟统一改为 000.000 ms
    4. 修改 I/O 测试块大小
    5. 统一字符为英文,解决乱码问题

    一、使用方法

    1. wget -qO---no-check-certificate https://raw.githubusercontent.com/oooldking/script/master/superbench.sh | bash
    wget -qO- --no-check-certificate https://raw.githubusercontent.com/oooldking/script/master/superbench.sh | bash

     

    二、测试结果

  • 相关阅读:
    使用_Capistrano_进行自动化部署(2)
    使用 Capistrano 进行自动化部署
    Zend_Framework_1 框架是如何被启动的?
    PHP新版本变化
    Phpstorm 无法自动断点 Exception
    理解希尔排序
    C# Thread 线程
    Unity 依赖注入容器的AOP扩展
    C# 面向切面编程 AOP
    C# 表达式树 Expression
  • 原文地址:https://www.cnblogs.com/Crazy-Liu/p/13322323.html
Copyright © 2011-2022 走看看