在系统性能优化和稳定性测试中,sysbench是一款开源、多线程的性能测试工具,支持CPU、内存、磁盘等硬件资源压测,也能对MySQL等数据库进行负载测试。本文将详细介绍sysbench的安装流程,以及Linux硬件压测、MySQL数据库压测的具体操作,帮助大家快速掌握压测方法。
1. sysbench安装(CentOS/RHEL系统)
sysbench支持多种系统,本文以基于RPM包管理的CentOS/RHEL为例,通过官方仓库安装,确保版本最新且兼容性强。
安装步骤如下,直接执行以下两条命令即可:
# 1. 添加sysbench官方仓库
curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash
# 2. 用yum安装sysbench
yum -y install sysbench
安装完成后,可执行sysbench --version验证是否安装成功,出现版本信息即代表安装完成。

2. Linux硬件压测
硬件是系统运行的基础,通过sysbench对CPU、内存、磁盘进行压测,能快速定位硬件性能瓶颈。
2.1 CPU压测
CPU压测主要评估CPU的计算能力,通过多线程执行素数计算任务实现。
# CPU压测命令:4线程,持续运行60秒
sysbench cpu --threads=4 --time=60 run
- 参数说明:
--threads=4:指定压测线程数,建议根据CPU核心数调整(如8核CPU可设为8);--time=60:压测持续时间,单位为秒。
压测结果会展示“每秒事件数”“平均延迟”等关键指标,可用于判断CPU的计算效率。

2.2 内存压测
内存压测评估内存的读写速度,通过连续读写指定大小的内存块实现。
# 内存压测命令:每次读写8KB数据,总读写量100G,持续60秒
sysbench memory --memory-block-size=8k --memory-total-size=100G --time=60 run
- 参数说明:
--memory-block-size=8k:单次内存块大小,常用8k/16k;--memory-total-size=100G:总读写数据量,建议大于物理内存,以测试内存调度能力。
压测结果会显示“内存读写速度(MB/s)”,可直观反映内存性能。

2.3 磁盘压测
磁盘压测评估磁盘的随机读写能力,需先准备测试文件,压测后清理文件,避免占用磁盘空间。
# 1. 创建压测目录(确保/data目录存在,无则先执行mkdir /data)
mkdir /data/sysbench
cd /data/sysbench
# 2. 准备测试文件:生成总大小2G的测试文件
sysbench fileio --file-total-size=2G prepare
# 3. 执行磁盘随机读写压测:2线程,持续60秒
sysbench fileio --threads=2 --file-total-size=2G --file-test-mode=rndrw --max-time=60 --max-requests=0 run
# 4. 清理测试文件(压测完成后必须执行,释放磁盘空间)
sysbench fileio --file-total-size=2G cleanup
- 参数说明:
--file-test-mode=rndrw:测试模式为“随机读写”,也可设为rndrd(随机读)、rndwr(随机写);--max-requests=0:表示不限制请求数,仅按--max-time控制压测时长。
压测结果会包含“磁盘IOPS(每秒输入输出次数)”“平均IO延迟”,可用于判断磁盘的IO性能。

3. MySQL数据库压测
sysbench通过模拟OLTP(在线事务处理)场景,测试MySQL的读写性能,需先完成数据库环境准备。
3.1 前置准备:创建压测库和用户
登录MySQL数据库,执行以下SQL语句,创建专用的压测库和用户(避免使用root账号,保证权限隔离):
-- 1. 创建压测数据库
create database sysbench_db;
-- 2. 创建压测用户(允许远程访问,密码可自定义)
CREATE USER 'sysbench_rw'@'%' identified WITH mysql_native_password BY 'Uda_dQc63';
-- 3. 授予用户操作权限(仅授予必要权限,生产环境建议限制为sysbench_db.*)
GRANT create,drop,insert,delete,update,select,index ON *.* TO 'sysbench_rw'@'%';
3.2 数据准备:生成测试表和数据
通过sysbench生成测试数据,模拟实际业务中的表结构(此处创建10张表,每张表10000条数据):
sysbench --db-driver=mysql \
--mysql-host=192.168.184.155 \ # MySQL服务器IP,替换为你的实际IP
--mysql-port=3306 \ # MySQL端口,默认3306
--mysql-user='sysbench_rw' \ # 压测用户
--mysql-password='Uda_dQc63' \ # 压测用户密码
--mysql-db=sysbench_db \ # 压测数据库
--threads=10 \ # 数据生成线程数
--table_size=10000 \ # 每张表的数据量
--tables=10 \ # 表数量
oltp_write_only prepare # 按“写场景”准备数据

3.3 执行MySQL压测
根据业务场景,分别执行“读写混合”“纯读”“纯写”压测,持续20秒,观察数据库性能表现。
3.3.1 读写混合压测
模拟实际业务中读写并存的场景:
sysbench --db-driver=mysql \
--mysql-host=192.168.184.155 \
--mysql-port=3306 \
--mysql-user='sysbench_rw' \
--mysql-password='Uda_dQc63' \
--mysql-db=sysbench_db \
--threads=10 \
--table_size=10000 \
--tables=10 \
--time=20 \ # 压测持续20秒
oltp_read_write run # 读写混合模式

3.3.2 纯读压测
模拟报表查询、数据统计等只读场景:
sysbench --db-driver=mysql \
--mysql-host=192.168.184.155 \
--mysql-port=3306 \
--mysql-user='sysbench_rw' \
--mysql-password='Uda_dQc63' \
--mysql-db=sysbench_db \
--threads=10 \
--table_size=10000 \
--tables=10 \
--time=20 \
oltp_read_only run # 纯读模式

3.3.3 纯写压测
模拟数据插入、更新等只写场景:
sysbench --db-driver=mysql \
--mysql-host=192.168.184.155 \
--mysql-port=3306 \
--mysql-user='sysbench_rw' \
--mysql-password='Uda_dQc63' \
--mysql-db=sysbench_db \
--threads=10 \
--table_size=10000 \
--tables=10 \
--time=20 \
oltp_write_only run # 纯写模式
压测结果会展示“每秒事务数(TPS)”“每秒查询数(QPS)”“事务延迟”等核心指标,可用于评估MySQL的处理能力。

3.4 压测后清理:删除测试数据
压测完成后,执行以下命令清理测试表,释放数据库空间:
sysbench --db-driver=mysql \
--mysql-host=192.168.184.155 \
--mysql-port=3306 \
--mysql-user='sysbench_rw' \
--mysql-password='Uda_dQc63' \
--mysql-db=sysbench_db \
--tables=10 \
oltp_read_write cleanup

总结
sysbench是一款轻量且高效的压测工具,通过本文的步骤,可完成从Linux硬件到MySQL数据库的全链路压测。压测时需注意:
- 调整
--threads“--time等参数,匹配实际硬件配置和业务场景; - MySQL压测前确保数据库处于空闲状态,避免影响生产数据;
- 重点关注“TPS/QPS”“延迟”等指标,这些是判断系统性能的核心依据。
通过压测可快速定位系统瓶颈,为后续的硬件升级、数据库优化提供数据支撑。

443

被折叠的 条评论
为什么被折叠?



