diff --git a/CPU性能一键测试脚本 b/CPU性能一键测试脚本 index d599416..7726269 100644 --- a/CPU性能一键测试脚本 +++ b/CPU性能一键测试脚本 @@ -1,301 +1,105 @@ #!/bin/bash -# VPS CPU性能测试和对比脚本 -# 用法: bash <(curl -sSL https://raw.githubusercontent.com/username/vpsbench/main/cpu_bench.sh) +# 简化版VPS性能对比测试脚本 +# 用法: bash <(curl -sSL https://raw.githubusercontent.com/username/vpsbench/main/simple_bench.sh) # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[0;33m' BLUE='\033[0;34m' -PURPLE='\033[0;35m' -CYAN='\033[0;36m' NC='\033[0m' -# 结果文件 -RESULTS_FILE="/tmp/vps_benchmark_results.txt" -COMPARE_FILE="/tmp/vps_comparison.txt" - # 安装工具 -install_tools() { - echo "安装必要工具..." - if command -v yum >/dev/null 2>&1; then - yum install -y sysbench bc wget curl >/dev/null 2>&1 - elif command -v apt-get >/dev/null 2>&1; then - apt-get update >/dev/null 2>&1 - apt-get install -y sysbench bc wget curl >/dev/null 2>&1 - fi -} +echo "安装测试工具..." +if command -v yum >/dev/null 2>&1; then + yum install -y sysbench bc >/dev/null 2>&1 +elif command -v apt-get >/dev/null 2>&1; then + apt-get update >/dev/null 2>&1 + apt-get install -y sysbench bc >/dev/null 2>&1 +fi # 获取系统信息 -get_system_info() { - CPU_NAME=$(grep "model name" /proc/cpuinfo | head -1 | cut -d: -f2 | sed 's/^ *//') - CPU_CORES=$(nproc) - MEMORY=$(free -h | grep Mem | awk '{print $2}') - OS=$(cat /etc/os-release | grep PRETTY_NAME | cut -d= -f2 | tr -d '"') - HOSTNAME=$(hostname) -} +CPU_CORES=$(nproc) +CPU_MODEL=$(grep "model name" /proc/cpuinfo | head -1 | cut -d: -f2 | sed 's/^ *//' | cut -c 1-30) +HOSTNAME=$(hostname) -# 性能测试 -run_benchmarks() { - echo "开始性能测试..." - - # 单核测试 - SINGLE_SCORE=$(sysbench cpu --threads=1 --cpu-max-prime=20000 run 2>/dev/null | grep "events per second" | awk '{printf "%.2f", $4}') - - # 多核测试 - MULTI_SCORE=$(sysbench cpu --threads=$CPU_CORES --cpu-max-prime=20000 run 2>/dev/null | grep "events per second" | awk '{printf "%.2f", $4}') - - # 浮点测试 - START_TIME=$(date +%s.%N) - echo "scale=3000; 4*a(1)" | bc -l -q >/dev/null 2>&1 - END_TIME=$(date +%s.%N) - FLOAT_TIME=$(echo "$END_TIME - $START_TIME" | bc) - - # 内存测试 - START_TIME=$(date +%s.%N) - dd if=/dev/zero of=/tmp/test.bin bs=1M count=100 status=none 2>/dev/null - END_TIME=$(date +%s.%N) - MEM_WRITE=$(echo "scale=2; 100 / ($END_TIME - $START_TIME)" | bc) - rm -f /tmp/test.bin -} +# 运行测试 +echo "正在测试CPU性能..." -# 保存结果 -save_results() { - cat > $RESULTS_FILE << EOF -VPS名称: $HOSTNAME -测试时间: $(date) -CPU型号: $CPU_NAME -CPU核心: $CPU_CORES -内存大小: $MEMORY -系统版本: $OS -单核得分: $SINGLE_SCORE -多核得分: $MULTI_SCORE -浮点耗时: ${FLOAT_TIME}秒 -内存写入: ${MEM_WRITE} MB/s -EOF +# 单核测试 +SINGLE=$(sysbench cpu --threads=1 --cpu-max-prime=20000 run 2>/dev/null | grep "events per second" | awk '{printf "%.1f", $4}') - echo "结果已保存到: $RESULTS_FILE" -} +# 多核测试 +MULTI=$(sysbench cpu --threads=$CPU_CORES --cpu-max-prime=20000 run 2>/dev/null | grep "events per second" | awk '{printf "%.1f", $4}') -# 显示当前结果 -show_current_results() { - echo "" - echo -e "${PURPLE}=== 当前VPS测试结果 ===${NC}" - echo "VPS名称: $HOSTNAME" - echo "CPU: $CPU_NAME" - echo "核心: $CPU_CORES" - echo "单核得分: $SINGLE_SCORE" - echo "多核得分: $MULTI_SCORE" - echo "浮点耗时: ${FLOAT_TIME}秒" - echo "内存写入: ${MEM_WRITE} MB/s" -} - -# 性能评级 -get_rating() { - local score=$1 - local type=$2 - - case $type in - "single") - if (( $(echo "$score > 800" | bc -l) )); then - echo "${GREEN}优秀${NC}" - elif (( $(echo "$score > 500" | bc -l) )); then - echo "${YELLOW}良好${NC}" - else - echo "${RED}一般${NC}" - fi - ;; - "multi") - local expected=$(echo "$CPU_CORES * 400" | bc) - if (( $(echo "$score > $expected" | bc -l) )); then - echo "${GREEN}优秀${NC}" - elif (( $(echo "$score > $(echo "$CPU_CORES * 250" | bc)" | bc -l) )); then - echo "${YELLOW}良好${NC}" - else - echo "${RED}一般${NC}" - fi - ;; - "float") - if (( $(echo "$score < 5" | bc -l) )); then - echo "${GREEN}优秀${NC}" - elif (( $(echo "$score < 10" | bc -l) )); then - echo "${YELLOW}良好${NC}" - else - echo "${RED}一般${NC}" - fi - ;; - esac -} - -# 显示对比参考 -show_reference() { - echo "" - echo -e "${CYAN}=== 性能对比参考 ===${NC}" - echo "单核性能参考:" - echo -e " ${GREEN}优秀: >800 ${YELLOW}良好: 500-800 ${RED}一般: <500${NC}" - echo "" - echo "多核性能参考 (以单核500为基准):" - echo -e " ${GREEN}优秀: 核心数 × 400+ ${YELLOW}良好: 核心数 × 250+ ${RED}一般: 低于核心数 × 250${NC}" - echo "" - echo "浮点性能参考:" - echo -e " ${GREEN}优秀: <5秒 ${YELLOW}良好: 5-10秒 ${RED}一般: >10秒${NC}" -} - -# 添加对比数据 -add_comparison() { - echo "" - echo -e "${YELLOW}是否将当前结果添加到对比数据库?(y/N)${NC}" - read -r answer - - if [[ $answer == "y" || $answer == "Y" ]]; then - echo "请输入这个VPS的标识名称(如: Vultr-2C4G, AWS-t2-medium):" - read -r vps_name - - if [ -n "$vps_name" ]; then - cat >> $COMPARE_FILE << EOF ----------------------------------------- -VPS名称: $vps_name -测试时间: $(date) -CPU型号: $CPU_NAME -CPU核心: $CPU_CORES -单核得分: $SINGLE_SCORE -多核得分: $MULTI_SCORE -浮点耗时: ${FLOAT_TIME}秒 -内存写入: ${MEM_WRITE} MB/s -EOF - echo -e "${GREEN}已添加到对比数据库: $COMPARE_FILE${NC}" - fi - fi -} +# 浮点测试 +echo "scale=2000; 4*a(1)" | bc -l -q >/dev/null 2>&1 & +FLOAT_PID=$! +sleep 3 +if ps -p $FLOAT_PID > /dev/null; then + FLOAT_TIME=">3秒" + kill $FLOAT_PID 2>/dev/null +else + FLOAT_TIME="<3秒" +fi # 显示对比结果 -show_comparison() { - if [ -f "$COMPARE_FILE" ]; then - echo "" - echo -e "${PURPLE}=== 历史对比结果 ===${NC}" - cat $COMPARE_FILE - else - echo "" - echo -e "${YELLOW}暂无对比数据,请先添加一些测试结果${NC}" - fi -} +echo "" +echo -e "${BLUE}=========================================${NC}" +echo -e "${BLUE} VPS性能对比结果${NC}" +echo -e "${BLUE}=========================================${NC}" +echo "主机: $HOSTNAME" +echo "CPU: $CPU_MODEL" +echo "核心: $CPU_CORES" +echo "" +echo -e "${BLUE}性能指标${NC} ${BLUE}当前VPS${NC} ${BLUE}评级${NC}" +echo "-----------------------------------------" -# 生成对比表格 -generate_comparison_table() { - if [ ! -f "$COMPARE_FILE" ]; then - return - fi - - echo "" - echo -e "${CYAN}=== 性能对比表格 ===${NC}" - printf "%-20s %-8s %-12s %-12s %-12s\n" "VPS名称" "核心数" "单核得分" "多核得分" "浮点耗时" - echo "----------------------------------------------------------------" - - # 从对比文件中提取数据 - while IFS= read -r line; do - if [[ $line == "VPS名称:"* ]]; then - vps_name=$(echo "$line" | cut -d: -f2 | sed 's/^ *//') - elif [[ $line == "CPU核心:"* ]]; then - cores=$(echo "$line" | cut -d: -f2 | sed 's/^ *//') - elif [[ $line == "单核得分:"* ]]; then - single=$(echo "$line" | cut -d: -f2 | sed 's/^ *//') - elif [[ $line == "多核得分:"* ]]; then - multi=$(echo "$line" | cut -d: -f2 | sed 's/^ *//') - elif [[ $line == "浮点耗时:"* ]]; then - float=$(echo "$line" | cut -d: -f2 | sed 's/^ *//' | awk '{print $1}') - # 输出一行数据 - if [ -n "$vps_name" ] && [ -n "$single" ]; then - printf "%-20s %-8s %-12s %-12s %-12s\n" "$vps_name" "$cores" "$single" "$multi" "${float}秒" - # 重置变量 - vps_name=""; cores=""; single=""; multi=""; float="" - fi - fi - done < "$COMPARE_FILE" -} - -# 清理对比数据 -clear_comparison() { - if [ -f "$COMPARE_FILE" ]; then - rm -f $COMPARE_FILE - echo -e "${GREEN}已清空对比数据${NC}" - else - echo -e "${YELLOW}暂无对比数据可清理${NC}" - fi -} - -# 主菜单 -main_menu() { - while true; do - echo "" - echo -e "${BLUE}=== VPS性能测试工具 ===${NC}" - echo "1. 运行性能测试" - echo "2. 显示当前结果" - echo "3. 添加到对比数据库" - echo "4. 显示对比结果" - echo "5. 生成对比表格" - echo "6. 清空对比数据" - echo "7. 显示性能参考" - echo "8. 退出" - echo "" - echo -n "请选择操作 (1-8): " - read -r choice - - case $choice in - 1) - install_tools - get_system_info - run_benchmarks - save_results - show_current_results - ;; - 2) - if [ -f "$RESULTS_FILE" ]; then - show_current_results - else - echo -e "${RED}请先运行性能测试${NC}" - fi - ;; - 3) - if [ -f "$RESULTS_FILE" ]; then - add_comparison - else - echo -e "${RED}请先运行性能测试${NC}" - fi - ;; - 4) - show_comparison - ;; - 5) - generate_comparison_table - ;; - 6) - clear_comparison - ;; - 7) - show_reference - ;; - 8) - echo "再见!" - exit 0 - ;; - *) - echo -e "${RED}无效选择${NC}" - ;; - esac - done -} - -# 直接运行测试并显示对比 -if [ "$1" == "auto" ]; then - install_tools - get_system_info - run_benchmarks - show_current_results - show_reference - if [ -f "$COMPARE_FILE" ]; then - generate_comparison_table - fi +# 单核性能对比 +if (( $(echo "$SINGLE > 800" | bc -l) )); then + SINGLE_RATING="${GREEN}优秀${NC}" +elif (( $(echo "$SINGLE > 500" | bc -l) )); then + SINGLE_RATING="${YELLOW}良好${NC}" else - main_menu + SINGLE_RATING="${RED}一般${NC}" fi +printf "单核性能: %-10s %-10s\n" "$SINGLE" "$SINGLE_RATING" + +# 多核性能对比 +EXPECTED_MULTI=$(echo "$SINGLE * $CPU_CORES * 0.8" | bc | awk '{printf "%.1f", $1}') +if (( $(echo "$MULTI > $EXPECTED_MULTI" | bc -l) )); then + MULTI_RATING="${GREEN}优秀${NC}" +elif (( $(echo "$MULTI > $(echo "$SINGLE * $CPU_CORES * 0.6" | bc)" | bc -l) )); then + MULTI_RATING="${YELLOW}良好${NC}" +else + MULTI_RATING="${RED}一般${NC}" +fi +printf "多核性能: %-10s %-10s\n" "$MULTI" "$MULTI_RATING" + +# 浮点性能对比 +if [ "$FLOAT_TIME" = "<3秒" ]; then + FLOAT_RATING="${GREEN}优秀${NC}" +else + FLOAT_RATING="${RED}一般${NC}" +fi +printf "浮点性能: %-10s %-10s\n" "$FLOAT_TIME" "$FLOAT_RATING" + +echo "-----------------------------------------" + +# 显示参考标准 +echo "" +echo -e "${YELLOW}参考标准:${NC}" +echo -e "${GREEN}优秀${NC}: 单核>800, 多核效率>80%" +echo -e "${YELLOW}良好${NC}: 单核500-800, 多核效率60-80%" +echo -e "${RED}一般${NC}: 单核<500, 多核效率<60%" + +# 保存结果用于后续对比 +RESULTS_FILE="/tmp/vps_bench_$(date +%Y%m%d_%H%M%S).txt" +cat > $RESULTS_FILE << EOF +$HOSTNAME | $CPU_CORES核 | 单核:$SINGLE | 多核:$MULTI | 浮点:$FLOAT_TIME +EOF + +echo "" +echo -e "结果已保存: ${GREEN}$RESULTS_FILE${NC}" +echo -e "对比其他VPS时查看这些文件即可"