以下是一个Linux电脑性能测试脚本,包含CPU、内存、磁盘和网络测试,并带有结果记录和颜色输出:
#!/bin/bash
# 性能测试脚本
# 版本:1.2
# 最后更新:2023年8月
# 设置颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
BLUE='\033[0;34m'
NC='\033[0m' # 恢复默认颜色
# 初始化日志文件
LOG_FILE="${HOME}/performance_test_$(date +%Y%m%d_%H%M%S).log"
touch $LOG_FILE
# 检查并安装必要软件
check_dependencies() {
local missing=()
local packages=("sysbench" "ioping" "speedtest-cli" "mbw")
echo -e "${BLUE}[INFO] 检查依赖...${NC}" | tee -a $LOG_FILE
for pkg in "${packages[@]}"; do
if ! command -v $pkg &> /dev/null; then
missing+=("$pkg")
fi
done
if [ ${#missing[@]} -ne 0 ]; then
echo -e "${YELLOW}[WARN] 缺少依赖包:${missing[*]}${NC}" | tee -a $LOG_FILE
read -p "是否尝试安装?(y/n) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
sudo apt-get update && sudo apt-get install -y ${missing[@]}
return $?
else
echo -e "${RED}[ERROR] 缺少必要依赖,测试无法继续${NC}" | tee -a $LOG_FILE
exit 1
fi
fi
}
# CPU测试
cpu_test() {
echo -e "${BLUE}[INFO] 开始CPU测试...${NC}" | tee -a $LOG_FILE
local threads=$(nproc)
# 计算10000以内的素数(多线程)
sysbench cpu --cpu-max-prime=10000 --threads=$threads run | tee -a $LOG_FILE
# OpenSSL速度测试
echo -e "\n${BLUE}[INFO] OpenSSL速度测试:${NC}" | tee -a $LOG_FILE
openssl speed rsa2048 aes-256-cbc 2>&1 | tee -a $LOG_FILE
}
# 内存测试
memory_test() {
echo -e "\n${BLUE}[INFO] 开始内存测试...${NC}" | tee -a $LOG_FILE
local total_mem=$(free -m | awk '/Mem:/ {print $2}')
local test_size=$((total_mem / 2))M # 使用一半内存避免交换
# MBW内存带宽测试
echo -e "${BLUE}[INFO] 内存带宽测试:${NC}" | tee -a $LOG_FILE
mbw -n 5 $test_size | tee -a $LOG_FILE
# 使用dd测试内存速度
echo -e "\n${BLUE}[INFO] dd内存速度测试:${NC}" | tee -a $LOG_FILE
dd if=/dev/zero of=/dev/null bs=1M count=50000 2>&1 | tee -a $LOG_FILE
}
# 磁盘测试
disk_test() {
echo -e "\n${BLUE}[INFO] 开始磁盘测试...${NC}" | tee -a $LOG_FILE
local test_dir="/tmp"
# 顺序读写测试
echo -e "${BLUE}[INFO] 顺序读写测试:${NC}" | tee -a $LOG_FILE
sysbench fileio --file-total-size=2G --file-test-mode=rndrw prepare
sysbench fileio --file-total-size=2G --file-test-mode=rndrw --time=60 run | tee -a $LOG_FILE
sysbench fileio --file-total-size=2G --file-test-mode=rndrw cleanup
# 随机IO延迟测试
echo -e "\n${BLUE}[INFO] 随机IO延迟测试:${NC}" | tee -a $LOG_FILE
ioping -c 20 -s 4k $test_dir | tee -a $LOG_FILE
# 使用fio进行混合负载测试
echo -e "\n${BLUE}[INFO] FIO混合负载测试:${NC}" | tee -a $LOG_FILE
fio --name=test --directory=$test_dir --size=1G --rw=randrw --bs=4k --direct=1 --numjobs=4 --runtime=30 --group_reporting 2>&1 | tee -a $LOG_FILE
}
# 网络测试
network_test() {
echo -e "\n${BLUE}[INFO] 开始网络测试...${NC}" | tee -a $LOG_FILE
# 带宽测试
echo -e "${BLUE}[INFO] Speedtest网络测速:${NC}" | tee -a $LOG_FILE
speedtest-cli --simple | tee -a $LOG_FILE
# 延迟测试
echo -e "\n${BLUE}[INFO] 延迟测试(ping 8.8.8.8):${NC}" | tee -a $LOG_FILE
ping -c 10 8.8.8.8 | tee -a $LOG_FILE
}
# 系统信息收集
system_info() {
echo -e "${BLUE}[INFO] 收集系统信息...${NC}" | tee -a $LOG_FILE
echo -e "=== 系统信息 ===" >> $LOG_FILE
uname -a >> $LOG_FILE
echo -e "\n=== CPU信息 ===" >> $LOG_FILE
lscpu >> $LOG_FILE
echo -e "\n=== 内存信息 ===" >> $LOG_FILE
free -h >> $LOG_FILE
echo -e "\n=== 磁盘信息 ===" >> $LOG_FILE
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT >> $LOG_FILE
echo -e "\n=== 网络接口 ===" >> $LOG_FILE
ip a >> $LOG_FILE
}
# 主函数
main() {
echo -e "${GREEN}Linux性能测试脚本启动...${NC}" | tee -a $LOG_FILE
echo -e "详细日志保存在:${BLUE}${LOG_FILE}${NC}\n"
check_dependencies
system_info
# 执行测试项目
cpu_test
memory_test
disk_test
network_test
echo -e "\n${GREEN}所有测试完成!${NC}" | tee -a $LOG_FILE
}
# 安全警告
echo -e "${RED}警告:本脚本会产生大量I/O和网络流量!${NC}"
read -p "确定要继续吗?(y/n) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
main
else
echo -e "${YELLOW}测试已取消${NC}"
exit 0
fi
使用说明:
保存为performance_test.sh
添加执行权限:chmod +x performance_test.sh
运行:sudo ./performance_test.sh(推荐使用root权限运行)特点:
包含CPU、内存、磁盘、网络全面测试
自动检测依赖并提示安装
记录完整系统信息
生成带时间戳的日志文件
彩色终端输出
安全确认提示
使用多种测试工具(sysbench、fio、ioping、speedtest-cli等)
注意事项:
需要root权限获取准确信息
磁盘测试会创建临时文件(测试后自动清理)
网络测试需要互联网连接
完整测试可能需要15-30分钟(取决于硬件配置)
测试结果可以在日志文件中查看,也可以通过终端输出的彩色结果快速浏览关键指标。文档更新时间: 2025-04-29 03:22 作者:月影鹏鹏