• 测试常用指标及工具


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

    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. 性能调优

    参考 性能调优攻略

  • 相关阅读:
    《算法》第二章部分程序 part 3
    《算法》第二章部分程序 part 2
    《算法》第二章部分程序 part 1
    《算法》第一章部分程序 part 2
    《算法》第一章部分程序 part 1
    Java,Hello World,《算法》环境搭建中的问题,用 cmd 和 IntelliJ Idea 分别编译和运行 Java 程序
    《汇编语言 基于x86处理器》第十一章 MS-DOS 编程部分的代码 part 1
    《汇编语言 基于x86处理器》第十三章高级语言接口部分的代码 part 2
    《汇编语言 基于x86处理器》第十三章高级语言接口部分的代码 part 1
    《汇编语言》(王爽)补充笔记,第 14 ~ 17 章
  • 原文地址:https://www.cnblogs.com/kika/p/10851678.html
Copyright © 2020-2023  润新知