基准测试(Benchmarking)是一种评估系统性能的方法,通常通过运行特定的程序或工作负载来测量硬件或软件的性能指标。以下是一些常见的基准测试类型和工具:
1. CPU 基准测试
- Sysbench:多线程性能测试工具,可以测试 CPU、内存、线程、IO 和数据库性能。
- Cinebench:测试 CPU 和 GPU 的性能,特别适用于 3D 渲染和视频编辑等应用。
- Geekbench:测试 CPU 和内存性能,提供跨平台的性能比较。
2. 内存基准测试
- Memtest86+:测试 RAM 的稳定性和性能,常用于诊断内存问题。
- Stream:测试内存带宽和复制速度。
3. 磁盘和存储基准测试
- FIO:灵活的 I/O 测试工具,可以测试多种存储设备的性能。
- Bonnie++:测试文件系统的性能,包括读取、写入和元数据操作。
- IOzone:测试文件系统的读写速度和并发性能。
4. 网络基准测试
- Netperf:测试网络性能,包括 TCP 和 UDP 传输。
- iperf:用于测量网络带宽和延迟。
5. 综合性能基准测试
- Phoronix Test Suite:提供广泛的测试,涵盖 CPU、GPU、存储和网络性能。
- UnixBench:测试类 Unix 系统的性能,包括 CPU、内存和文件系统。
6. 数据库基准测试
- sysbench:除了 CPU 和内存测试外,还可以测试数据库性能。
- Apache JMeter:用于测试数据库和 Web 应用程序的性能。
7. 图形和 GPU 基准测试
- Unigine Heaven:测试 GPU 的 3D 渲染能力。
- 3DMark:广泛使用的 GPU 性能测试工具。
8. 虚拟化和云基准测试
- Vmmark:由 Google 开发,用于测试虚拟化性能。
- CloudSuite:测试云基础设施的性能。
如何进行基准测试
- 选择适当的工具:根据你需要测试的性能指标选择合适的基准测试工具。
- 准备测试环境:确保测试环境干净、一致,以避免外部因素影响结果。
- 运行测试:按照工具的指南运行基准测试。
- 分析结果:对比测试结果,找出性能瓶颈或优势。
stress 是一个 Linux 系统压力测试工具,用作异常进程模拟平均负载升高的场景。
strees: 压测命令,–cpu cpu压测选项,-i io压测选项,-c 进程数压测选项,–timeout 执行时间
sysbench 来模拟系统多线程调度切换的情况
显示平均负载:uptime、top,显示的顺序是最近1分钟、5分钟、15分钟,从此可以看出平均负载的趋势。
sysstat 包含了常用的 Linux 性能工具,用来监控和分析系统是的性能,找出平均负载升高的根源,包括几个命令 mpstat 和 pidstat,iostat。
mpstat: 多核cpu性能分析工具,-P ALL监视所有cpu,cswch ,表示每秒自愿上下文切换的次数,nvcswch ,表示每秒非自愿上下文切换的次数。
pidstat: 进程性能分析工具,-u 显示cpu利用率
iostat:IO性能分析工具
vmstat 是一个常用的系统性能分析工具,主要用来分析系统的内存使用情况,也常用来分析 CPU 上下文切换和中断的次数。
cs(context switch)是每秒上下文切换的次数。
in(interrupt)则是每秒中断的次数。
r(Running or Runnable)是就绪队列的长度,也就是正在运行和等待 CPU 的进程数。
b(Blocked)则是处于不可中断睡眠状态的进程数。
cat /proc/interrupts查看系统中断次数
cat /proc/stat 查看系统进程整体的统计信息
perf 是 Linux 2.6.31 以后内置的性能分析工具。它以性能事件采样为基础,不仅可以分析系统的各种事件和内核性能,还可以用来分析指定应用程序的性能问题。perf top,类似于 top,它能够实时显示占用 CPU 时钟最多的函数或者指令,因此可以用来查找热点函数。perf top 虽然实时展示了系统的性能信息,但它的缺点是并不保存数据,也就无法用于离线或者后续的分析。而 perf record 则提供了保存数据的功能,保存后的数据,需要你用 perf report 解析展示。在实际使用中,我们还经常为 perf top 和 perf record 加上 -g 参数,开启调用关系的采样,方便我们根据调用链来分析性能问题。
pstree 就可以用树状形式显示所有进程之间的关系:
execsnoop 就是一个专为短时进程设计的工具。它通过 ftrace 实时监控进程的 exec() 行为,并输出短时进程的基本信息,包括进程 PID、父进程 PID、命令行参数以及执行的结果。
dstat可以同时查看 CPU 和 I/O 这两种资源的使用情况,便于对比分析
一般来说,我们首先通过uptime查看系统负载,然后使用mpstat结合pidstat来初步判断到底是cpu计算量大还是进程争抢过大或者是io过多,接着使用vmstat分析切换次数,以及切换类型,来进一步判断到底是io过多导致问题还是进程争抢激烈导致问题。