Sysbench 是一个用于评估和测试系统性能的多功能基准测试工具,主要用于测量 CPU、内存、磁盘 I/O、数据库(如 MySQL)等子系统的性能。它可以帮助你评估硬件或系统的表现,找到潜在的瓶颈。
一、sysbench安装
在大多数 Linux 发行版中,sysbench 可以通过包管理器安装。
在 Ubuntu/Debian:
sudo apt update
sudo apt install sysbench
在 CentOS/RHEL:
sudo yum install epel-release
sudo yum install sysbench
二、测试类型
sysbench 支持以下几种性能测试类型:
CPU 性能测试
内存性能测试
磁盘 I/O 性能测试
数据库(如 MySQL)性能测试
三、测试过程
1、cpu性能测试
此测试会执行一系列计算操作,模拟CPU的计算性能
sysbench cpu --cpu-max-prime=20000 --threads=4 run
- –cpu-max-prime=20000:表示最大素数计算为 20000,增加这个值可以增加测试的负载。
- –threads=4:表示使用 4 个线程,模拟多核 CPU 的工作负载。
还可以通过–time选项来设置测试运行的最长时间,例如让测试运行60秒
sysbench cpu --cpu-max-prime=20000 --threads=4 --time=60 run
测试结果将显示 CPU 在一定时间内完成的计算数量
测试结果示例如下:
Threads started!CPU speed:events per second: 1381.25General statistics:total time: 10.0005stotal number of events: 13819Latency (ms):min: 0.72avg: 0.72max: 0.8195th percentile: 0.73sum: 9996.75Threads fairness:events (avg/stddev): 13819.0000/0.00execution time (avg/stddev): 9.9967/0.00
- 每秒事件数(events per second)
events per second: 1381.25,表示在测试运行期间,系统每秒处理的事件数为1381.25 - 总执行时间(total time):
表示整个测试所花费的时间。total time: 10.0005s,表示总共耗时10.0005秒 - 每个线程的执行时间(execution time)
在多线程测试中,每个线程都有自己的执行时间,通常会显示平均值和标准差。execution time (avg/stddev): 9.9967/0.00,表示每个线程的平均执行时间为9.9967秒,标准差为0秒
关键性能指标总结:
执行时间是sysbench测试输出的关键部分,显示了测试运行的总时长和每个线程的执行时间,在多线程测试中,sysbench还会显示每秒处理的事件数和每次请求的延迟。
2、内存性能测试
该测试用于评估内存的读写速度
sysbench memory --memory-block-size=1M --memory-total-size=10G --threads=4 run
- –memory-block-size=1M 表示每次内存操作的块大小为1MB
- –memory-total-size=10G 表示测试总共将写入或读取10GB的数据
- –threads=4:表示使用 4 个线程,模拟多核 CPU 的工作负载。
测试结果示例如下:
Threads started!Total operations: 10240 (15972.08 per second)10240.00 MiB transferred (15972.08 MiB/sec)General statistics:total time: 0.6371stotal number of events: 10240Latency (ms):min: 0.06avg: 0.06max: 0.0895th percentile: 0.06sum: 632.48Threads fairness:events (avg/stddev): 10240.0000/0.00execution time (avg/stddev): 0.6325/0.00
-
操作次数(Total operations)
Total operations: 10240 (15972.08 per second),表示测试中总共进行了10240次内存操作,平均每秒执行了15972.08次操作
这个值越高,表示系统的内存读写性能越好 -
数据传输量(MiB transferred)
10240.00 MiB transferred (15972.08 MiB/sec),显示总共传输了10240MB(10GB)的数据,传输速度为15972.08 MB/s
代表系统每秒可以处理15972MB的内存数据,这个指标显示了内存的额吞吐量,通常越高越好 -
总时间(total time)
total time: 0.6371s,表示整个测试花费的时间为0.6371秒 -
延迟(Latency)
延迟是指每次内存操作的响应时间。
min: 0.06 (最小延迟)
avg: 0.06 (平均延迟)
max: 0.08 (最大延迟)
95th percentile: 0.06 (95%百分位延迟)
sum: 632.48 (总延迟)
延迟越低,内存性能越好,一般来说,内存的延迟越小,应用程序处理数据的响应时间就越快 -
线程公平性(Threads fairness)
这部分展示了在多线程测试中,每个线程的执行时间和处理的事件数
events (avg/stddev):10240.0000/0.00,表示每个线程平均处理了1024次内存从哦啊做,标准差为0。表明线程之间的负载分布相对均衡
execution time (avg/stddev): 0.6325/0.00,表示每个线程的平均执行时间为0.6325,标准差为0
关键性能指标总结:
- 内存吞吐量(MB/sec)
这是内存读写的关键性能指标,显示每秒可以传输的数据量 - 操作次数(ops/sec)
这表示系统每秒能够处理多少次内存操作 - 延迟(latency)
表示系统处理每次内存请求的速度
3、磁盘I/O性能测试
此测试用于评估磁盘读写速度
准备磁盘测试文件
sysbench fileio --file-total-size=5G prepare
运行随机读写测试
sysbench fileio --file-total-size=5G --file-test-mode=rndrw --max-time=60 --max-requests=0 --threads=4 run
清理测试文件
sysbench fileio --file-total-size=5G cleanup
- –file-total-size=5G:生成的测试文件大小为5GB
- –file-test-mode-rndrw:进行随机读写操作
- –max-time=60:测试运行时间为60秒
- –max-requests=0:表示不限请求次数,以时间为准
- –threads=4:表示使用 4 个线程,模拟多核 CPU 的工作负载
测试结果示例如下:
Threads started!File operations:reads/s: 640.02writes/s: 426.68fsyncs/s: 1367.10Throughput:read, MiB/s: 10.00written, MiB/s: 6.67General statistics:total time: 60.0842stotal number of events: 146124Latency (ms):min: 0.00avg: 0.41max: 53.4295th percentile: 0.97sum: 59905.41Threads fairness:events (avg/stddev): 146124.0000/0.00execution time (avg/stddev): 59.9054/0.00
- 吞吐量(Throughput)
read 10.00Mib/s,表示系统每秒可以处理约10Mib的数据读
越高的吞吐量表示磁盘的读写速度越快,通过固态硬盘(SSD)的吞吐量会远高于传统机械硬盘(HDD)
4、mysql数据库性能测试
在进行数据库性能测试之前,首先需要准备好mysql数据库,并创建测试表
准备数据库表
sysbench oltp_read_write --db-driver=mysql --mysql-db=test --mysql-user=root --mysql-password=yourpassword --tables=10 --table-size=1000000 prepare
运行测试
sysbench oltp_read_write --db-driver=mysql --mysql-db=test --mysql-user=root --mysql-password=yourpassword --tables=10 --table-size=1000000 --threads=8 --time=60 run
清理数据库
sysbench oltp_read_write --db-driver=mysql --mysql-db=test --mysql-user=root --mysql-password=yourpassword cleanup- --tables=10:表示创建10个测试表- --table-size=1000000 :表示包含1000000行数据- --threads=8:使用8个线程- --time=60:测试时间为60秒