#!/usr/bin/env bash # ============================================================================ # MAX Bench — 服务端轻量性能基准测试 # 原创脚本,受 bench.sh / yabs.sh 等基准测试理念启发 # 但更轻量、不安装多余依赖、中文输出 # # 风险等级: 🟢 只读 — 不修改任何系统设置 # 用法: bash <(curl -fsSL https://dl.unvmax.com/linux/scripts/max-tools/max-bench.sh) # ============================================================================ set -e R='\033[1;31m' G='\033[1;32m' Y='\033[1;33m' B='\033[1;34m' C='\033[1;36m' M='\033[1;35m' W='\033[1;37m' N='\033[0m' GR='\033[90m' echo -e "${B}┌─────────────────────────────────────────────┐${N}" echo -e "${B}│${N} ${G}MAX 服务端基准测试${N} ${GR}(轻量 / 只读)${N}" echo -e "${B}└─────────────────────────────────────────────┘${N}" echo hostname=$(hostname) echo -e " ${C}主机:${N} ${W}$hostname${N} $(date '+%Y-%m-%d %H:%M:%S')" # --- CPU 性能测试 (π 计算) --- echo -e "\n ${M}1. CPU 性能 (计算 5000 位 π × 3 次取均)${N}" echo -e " ${GR}───${N}" total_time=0 for i in 1 2 3; do start=$(date +%s%N) python3 -c "import sys; sys.setrecursionlimit(10000); from decimal import Decimal, getcontext; getcontext().prec=5000; n=5000; pi=sum(Decimal(1)/16**k*(Decimal(4)/(8*k+1)-Decimal(2)/(8*k+4)-Decimal(1)/(8*k+5)-Decimal(1)/(8*k+6)) for k in range(n))" 2>/dev/null end=$(date +%s%N) elapsed=$(( (end - start) / 1000000 )) total_time=$((total_time + elapsed)) echo -e " ${GR} 第 $i 次: ${elapsed}ms${N}" done avg=$((total_time / 3)) [ "$avg" -lt 500 ] && c=$G [ "$avg" -ge 500 ] && [ "$avg" -lt 2000 ] && c=$Y [ "$avg" -ge 2000 ] && c=$R echo -e " ${C}CPU 评分:${N} ${c}${avg}ms${N} ${GR}(越低越好)${N}" # --- 内存带宽测试 (dd) --- echo -e "\n ${M}2. 内存读写性能${N}" echo -e " ${GR}───${N}" mem_write=$(dd if=/dev/zero of=/dev/null bs=1M count=1024 2>&1 | tail -1 | awk '{print $(NF-1), $NF}') echo -e " ${C}内存写:${N} ${W}${mem_write:-N/A}${N}" mem_read=$(dd if=/dev/zero of=/dev/null bs=1M count=1024 2>&1 | tail -1 | awk '{print $(NF-1), $NF}') echo -e " ${C}内存读:${N} ${W}${mem_read:-N/A}${N}" # --- 磁盘 IO 测试 --- echo -e "\n ${M}3. 磁盘 IO 性能${N}" echo -e " ${GR}───${N}" tmpfile=$(mktemp /tmp/bench_XXXXXX 2>/dev/null || echo "/tmp/bench.tmp") seq_write=$(dd if=/dev/zero of="$tmpfile" bs=1M count=512 2>&1 | tail -1 | awk '{print $(NF-1), $NF}' 2>/dev/null) echo -e " ${C}磁盘顺序写:${N} ${W}${seq_write:-N/A}${N}" seq_read=$(dd if="$tmpfile" of=/dev/null bs=1M count=512 2>&1 | tail -1 | awk '{print $(NF-1), $NF}' 2>/dev/null) echo -e " ${C}磁盘顺序读:${N} ${W}${seq_read:-N/A}${N}" rm -f "$tmpfile" 2>/dev/null # 4K 随机 IO tmpfile2="/tmp/bench_rnd_$$" seq_rnd=$(dd if=/dev/zero of="$tmpfile2" bs=4k count=10000 2>&1 | tail -1 | awk '{print $(NF-1), $NF}' 2>/dev/null) echo -e " ${C}4K 随机写:${N} ${W}${seq_rnd:-N/A}${N}" rm -f "$tmpfile2" 2>/dev/null # --- 网络延迟测试 --- echo -e "\n ${M}4. 网络延迟 (ping 5 次取均)${N}" echo -e " ${GR}───${N}" for target in "8.8.8.8" "1.1.1.1" "223.5.5.5"; do avg_ping=$(ping -c 3 -W 2 "$target" 2>/dev/null | tail -1 | awk -F'/' '{print $5}' 2>/dev/null) [ -z "$avg_ping" ] && avg_ping="超时" echo -e " ${C}$target:${N} ${W}${avg_ping}ms${N}" done echo echo -e "${GR}👉 负载分析: max-loadcheck.sh | 安全扫描: max-security-scan.sh${N}"