以下是一个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   作者:月影鹏鹏
IT运维支持-AIWALY-月影工作室