测试常用指标及工具

测试,是一个挺专业的事情。

1. 系统性能定义

性能测试指标

  • Throughput:吞吐量,系统每秒钟可以处理的请求数,任务数。
  • Latency:系统延迟,系统在处理一个请求或一个任务时的延迟。
  • TPS:每秒响应的任务数量。

考察系统性能时需要同时考虑上面的性能指标。比如最多允许 2 秒以内的延迟时,系统最多可以承受多大并发。在描述系统性能时,响应时间参数必须和吞吐量挂钩,单纯的响应时间意义不大。

这两个性能指标之间互相有影响:

  • Throughput 增大会导致 Latency 增大,请求越多系统负载越高,延迟越大。
  • Latency 越小则系统的 Throughput 就越高,Latency 小则说明处理请求的速度快,可以处理更多的请求。

某些测试可能还会有平均值和成功率这两个性能指标。

性能测试方法

  • 负载测试
  • 压力测试
  • 配置测试
  • 并发测试
  • 可靠性测试

2. 系统性能测试

测试之前必须首先要明确需求。对于不同系统,要求的 Throughput 和 Latency 会有所不同。完整的测试流程如下:

  • 明确 Latency:不同业务可以有不同的响应时间,例如可以设定为 2 秒。
  • 制定测试方法:选择一个向系统施加指定的 Throughput 的压力测试工具(参考下面),选择一个测量 Latency 的工具(例如 Fiddler、Wireshark)。
  • 开始性能测试并汇总数据:不断提升 Throughput,看看系统负载情况,判断系统是否正常。如果系统在指定 Throughput 下未宕机,则记录 Latency。Throughput 增大到一定大小后,Latency 会开始抖动,通常会把 95% 的请求在指定的 Latency 内得到响应时对应的 Throughput 作为一个重要阈值。
  • 分析结果:将结果汇总成图标。

常用的压力测试工具有:
- JMeter(Java 桌面应用,开源稳定且生态完善,并发差)
- wrk(简单的 http 性能测试工具)
- Loadrunner(收费,目前属于 microfocus)
- webbench(只支持 Linux,最多可以模拟3万个并发连接)
- http_load(程序小巧,资源占用少)
- ab(Apache 集成,简单功能少)
- tcpcopy(开源,生态活跃)
- 压测大师(将测试打包成服务,在云端直接使用)。

性能测试时,每个 Throughput 的压力需要持续一段时间,尤其是在阈值附件的 Throughput,可能需要几个小时甚至几天的压测。

3. 查找系统瓶颈

3.1 查看操作系统负载

看操作系统负载,就是看操作系统的 CPU 利用率、内存使用率、磁盘 IO、网络 IO。Linux 下常用的命令和工具有:SystemTap(查看内核信息,参考 这里),iostat, top, tcpdump 等。

关于 CPU,多核 CPU 中的 CPU0 在执行普通任务的同时还负责核间调度,因此要确保其负责不能过高。
关于 IO,IO 使用率高时 CPU 使用率一般就比较低,程序一般会交替占用 CPU 或 IO。

3.2 使用 Profiler 测试

系统中 80% 的运行时间花在了 10% 的代码上,找出那些频繁调用的代码并优化可以事半功倍。

测试时,可以在代码中使用计时器和函数调用计算器做统计并定时写入日志,也可以分块注释进行测试以查找问题代码段。

Profiler 测试工具:

  • Perf:Linux kernel 自带的系统性能优化工具,与 Linux Kernel 紧密结合。可以按进程、CPU 或 counter group 等不同类别来查看信息,对代码优化到 CPU 的微指令级别。
  • xhprof:PHP 语言的轻量级分层性能测量分析器,轻量,可在生产环境部署。参考 这里

4. 性能调优

参考 性能调优攻略

原文地址:https://www.cnblogs.com/kika/p/10851678.html