性能测试

TPS和响应时间的关系[1] #

performance1.jpg

在这个图中,定义了三条曲线、三个区域、两个点以及三个状态描述。

  1. 三条曲线:吞吐量的曲线(紫色)、使用率 / 用户数曲线(绿色)、响应时间曲线(深 蓝色)。
  2. 三个区域:轻负载区(Light Load)、重负载区(Heavy Load)、塌陷区(Buckle Zone)。
  3. 两个点:最优并发用户数(The Optimum Number of Concurrent Users)、最大并发 用户数(The Maximum Number of Concurrent Users)。
  4. 三个状态描述:资源饱和(Resource Saturated)、吞吐下降(Throughput Falling)、用户受影响(End Users Effected)。

性能指标的计算方式 [2] #

公式(1):
并发用户数计算的通用公式:C = nL/T
其中 C 是平均的并发用户数;n 是 login session 的数量;L 是 login session 的平均长 度;T 指考察的时间段长度。

公式(2):
并发用户数峰值:
performance5.png
C’指并发用户数的峰值,C 就是公式(1)中得到的平均的并发用户数。该公式是假设用 户的 login session 产生符合泊松分布而估算得到的。

仔细搜索之后发现会发现这两个公式的出处是 2004 年一个叫 Eric Man Wong 的人写的一篇名叫《Method for Estimating the Number of Concurrent Users》的文章。中英文我都反复看到很多篇。同时也会网上看到有些文章中把这个文章描述成“业界公认”的计算方法。

性能测试 #

  • 性能测试
    • 环境假设
      • 负载模型【4,5】
          1. 人为模拟请求
          1. 复制线上流量
          1. 引流
      • 故障模拟【6】
        • Eg. tcpkill
    • 结果分析
      • 瓶颈分析
      • 热点 【5】
        • 20%代码影响了80%
    • 类型【5】
      • benchmark
      • 性能测试,负载测试,压力测试
      • 稳定性测试
    • 流程 [参考3]
        1. 定义响应时间,TP99
        1. 这个响应时间的限制下,找到最高的吞吐量(负载测试)
        1. 二步测试得到的吞吐量连续7天的不间断的压测系统(稳定性测试)
        1. 找到系统的极限值(压力测试,抗峰值 peek)
        1. Burst Test
    • 注意点
      • 平均值不靠谱,TP才靠谱(百分比分布统计)
        • 平均值
        • 标准方差
        • 百分位数
        • 中位数
      • 关系
        • 响应时间要和吞吐量挂钩
          • 不同的吞吐量会有不同的响应时间
        • 响应时间/吞吐量要和成功率挂钩
    • 应用程序Profile
      • 问题:让程序运行的性能变低

性能监控 #

  • 性能优化
    • 监控
      • 分层
        • 链路跟踪,APM
        • 中间件监控 Eg.Tomcat 线程池
        • 基础设施监控 Eg. cpu使用率,负载
      • 数据可视化,可观察性
        • 折线图
        • 散点图
        • 热图
      • 告警通知
        • 阈值 Eg. 比如大于TP99%
      • 性能指标
        • 响应时间,吞吐量,成功率【5】
        • 低延迟,会有高吞吐
    • 方法论【7->2.5节】
      • 工具法
      • USE,识别系统瓶颈
        • Utilization(使用率)
        • Saturation(饱和度, 负载)
        • Errors(错误)
      • 工作负载特征归纳
      • 延迟分析
      • 静态性能调整
      • 缓存调优

压测工具 #

ab Jmeter wrk

网络 #

httpstat [20]

参考 #

  1. 02丨性能综述:TPS和响应时间之间是什么关系? 高楼
  2. 03丨性能综述:怎么理解TPS、QPS、RT、吞吐量这些性能指标? 高楼

  1. 性能测试应该怎么做?
  2. Go to Page self
  3. 关于容量预估/性能压测的思考 失效
  4. Go to Page self 重复的
  5. 《性能之巅:洞悉系统、企业与云计算》
  6. httpstat go httpstat python