155 lines
4.7 KiB
Bash
155 lines
4.7 KiB
Bash
#!/bin/bash
|
|
|
|
# 快速VPS性能测试脚本
|
|
# 用法: bash <(curl -sSL https://raw.githubusercontent.com/username/vpsbench/main/quick_bench.sh)
|
|
|
|
# 颜色定义
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[0;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m'
|
|
|
|
echo -e "${BLUE}=========================================${NC}"
|
|
echo -e "${BLUE} 快速性能测试${NC}"
|
|
echo -e "${BLUE}=========================================${NC}"
|
|
|
|
# 获取基础信息
|
|
CPU_CORES=$(nproc)
|
|
CPU_MODEL=$(grep "model name" /proc/cpuinfo | head -1 | cut -d: -f2 | sed 's/^ *//' | head -c 40)
|
|
MEM_TOTAL=$(free -m | grep Mem | awk '{print $2}')
|
|
|
|
echo "CPU: $CPU_MODEL"
|
|
echo "核心: $CPU_CORES | 内存: ${MEM_TOTAL}MB"
|
|
echo ""
|
|
|
|
# 测试1: 单核计算速度 (3秒超时)
|
|
echo -e "${YELLOW}1. 单核性能测试...${NC}"
|
|
timeout 3 bash -c '
|
|
START_TIME=$(date +%s.%N)
|
|
for i in {1..100000}; do
|
|
echo "test$i" | md5sum > /dev/null 2>&1
|
|
done
|
|
END_TIME=$(date +%s.%N)
|
|
echo "scale=2; $END_TIME - $START_TIME" | bc
|
|
' 2>/dev/null || echo "3.00+"
|
|
SINGLE_TIME=$?
|
|
|
|
# 测试2: 多核并发能力 (5秒超时)
|
|
echo -e "${YELLOW}2. 多核性能测试...${NC}"
|
|
START_TIME=$(date +%s.%N)
|
|
for i in $(seq 1 $CPU_CORES); do
|
|
(timeout 5 dd if=/dev/zero bs=1M count=10 2>/dev/null | md5sum > /dev/null 2>&1) &
|
|
done
|
|
wait 2>/dev/null
|
|
END_TIME=$(date +%s.%N)
|
|
MULTI_TIME=$(echo "scale=2; $END_TIME - $START_TIME" | bc)
|
|
|
|
# 测试3: 内存速度 (3秒超时)
|
|
echo -e "${YELLOW}3. 内存性能测试...${NC}"
|
|
START_TIME=$(date +%s.%N)
|
|
timeout 3 dd if=/dev/zero of=/dev/null bs=1M count=100 2>&1 | grep "copied" | awk '{print $8, $9}'
|
|
MEM_SPEED=$?
|
|
if [ $MEM_SPEED -ne 0 ]; then
|
|
echo ">30秒/MB"
|
|
MEM_SCORE="慢"
|
|
else
|
|
MEM_SCORE="正常"
|
|
fi
|
|
|
|
# 测试4: 磁盘IO速度 (如果有写入权限)
|
|
echo -e "${YELLOW}4. 磁盘IO测试...${NC}"
|
|
if [ -w /tmp ]; then
|
|
START_TIME=$(date +%s.%N)
|
|
timeout 5 dd if=/dev/zero of=/tmp/test_io.bin bs=1M count=50 oflag=direct 2>&1 | grep "copied" | awk '{print $8, $9}'
|
|
IO_SPEED=$?
|
|
rm -f /tmp/test_io.bin 2>/dev/null
|
|
if [ $IO_SPEED -ne 0 ]; then
|
|
echo "IO受限"
|
|
IO_SCORE="慢"
|
|
else
|
|
IO_SCORE="正常"
|
|
fi
|
|
else
|
|
echo "无写入权限"
|
|
IO_SCORE="未知"
|
|
fi
|
|
|
|
# 测试5: 系统响应速度
|
|
echo -e "${YELLOW}5. 系统响应测试...${NC}"
|
|
START_TIME=$(date +%s.%N)
|
|
for i in {1..100}; do
|
|
ls / > /dev/null 2>&1
|
|
done
|
|
END_TIME=$(date +%s.%N)
|
|
RESPONSE_TIME=$(echo "scale=3; ($END_TIME - $START_TIME) * 1000" | bc)
|
|
|
|
# 性能评分
|
|
echo -e "\n${BLUE}=========================================${NC}"
|
|
echo -e "${BLUE} 性能评分${NC}"
|
|
echo -e "${BLUE}=========================================${NC}"
|
|
|
|
# 单核评分
|
|
if (( $(echo "$SINGLE_TIME < 1.0" | bc -l 2>/dev/null) )); then
|
|
SINGLE_SCORE="${GREEN}优秀${NC}"
|
|
elif (( $(echo "$SINGLE_TIME < 2.0" | bc -l 2>/dev/null) )); then
|
|
SINGLE_SCORE="${YELLOW}良好${NC}"
|
|
else
|
|
SINGLE_SCORE="${RED}一般${NC}"
|
|
fi
|
|
|
|
# 多核评分
|
|
if (( $(echo "$MULTI_TIME < 2.0" | bc -l 2>/dev/null) )); then
|
|
MULTI_SCORE="${GREEN}优秀${NC}"
|
|
elif (( $(echo "$MULTI_TIME < 5.0" | bc -l 2>/dev/null) )); then
|
|
MULTI_SCORE="${YELLOW}良好${NC}"
|
|
else
|
|
MULTI_SCORE="${RED}一般${NC}"
|
|
fi
|
|
|
|
# 响应评分
|
|
if (( $(echo "$RESPONSE_TIME < 50" | bc -l 2>/dev/null) )); then
|
|
RESPONSE_SCORE="${GREEN}优秀${NC}"
|
|
elif (( $(echo "$RESPONSE_TIME < 100" | bc -l 2>/dev/null) )); then
|
|
RESPONSE_SCORE="${YELLOW}良好${NC}"
|
|
else
|
|
RESPONSE_SCORE="${RED}一般${NC}"
|
|
fi
|
|
|
|
echo -e "单核性能: $SINGLE_SCORE"
|
|
echo -e "多核性能: $MULTI_SCORE"
|
|
echo -e "内存性能: $MEM_SCORE"
|
|
echo -e "磁盘IO: $IO_SCORE"
|
|
echo -e "系统响应: ${RESPONSE_TIME}ms ($RESPONSE_SCORE)"
|
|
|
|
# 总体评价
|
|
echo -e "\n${BLUE}=========================================${NC}"
|
|
if [ "$SINGLE_SCORE" = "${GREEN}优秀${NC}" ] && [ "$MULTI_SCORE" = "${GREEN}优秀${NC}" ]; then
|
|
echo -e "${GREEN}总体评价: 性能强劲${NC}"
|
|
elif [ "$SINGLE_SCORE" != "${RED}一般${NC}" ] && [ "$MULTI_SCORE" != "${RED}一般${NC}" ]; then
|
|
echo -e "${YELLOW}总体评价: 性能良好${NC}"
|
|
else
|
|
echo -e "${RED}总体评价: 性能一般${NC}"
|
|
fi
|
|
|
|
echo -e "${BLUE}=========================================${NC}"
|
|
|
|
# 保存简要结果
|
|
RESULTS_FILE="/tmp/vps_quick_$(date +%Y%m%d_%H%M%S).txt"
|
|
cat > $RESULTS_FILE << EOF
|
|
主机: $(hostname)
|
|
CPU: $CPU_CORES核心 - $(echo "$CPU_MODEL" | cut -c1-30)
|
|
测试时间: $(date)
|
|
|
|
性能概况:
|
|
- 单核性能: $(echo $SINGLE_SCORE | sed 's/\\033\[[0-9;]*m//g')
|
|
- 多核性能: $(echo $MULTI_SCORE | sed 's/\\033\[[0-9;]*m//g')
|
|
- 内存性能: $MEM_SCORE
|
|
- 磁盘IO: $IO_SCORE
|
|
- 系统响应: ${RESPONSE_TIME}ms
|
|
|
|
EOF
|
|
|
|
echo -e "结果保存到: ${GREEN}$RESULTS_FILE${NC}"
|
|
echo -e "\n${YELLOW}提示:${NC} 在不同VPS上运行后对比评价即可"
|