本文大纲

《如何做性能测试》

常用测试方法

正文

性能测试是指通过逐步增加系统的负载(如并发访问量),来评估系统在不同压力下的响应时间和资源消耗情况,并确定其性能瓶颈和可接受范围,得出系统的性能指标。

下面以电商网站为例进行说明。

性能测试的方法

目的: 确保系统在日常使用中的稳定性和响应速度。确保系统在高流量条件下仍能维持稳定的服务。

  • 使用负载工具(如JMeter、Locust)模拟100个并发用户的访问,记录下系统的各项性能指标(例如响应时间不超过2秒),并分析资源占用情况。
  • 在增加负载的同时监控CPU、内存和网络的使用情况,确保系统的整体稳定性,并优化资源分配以应对高峰时段的需求。

压力测试的方法

目的 : 确定系统的最大负载能力,并获取各项性能指标和资源消耗情况。

压力测试方法1

  • 模拟2000个并发用户同时进行大量操作(如搜索浏览商品)。
  • 监控系统的崩溃点或性能显著下降的时刻,记录并分析系统的表现。

压力测试方法2

  • 在负载不断增加(如25、50、75、100、500、2000并发)进行大量操作(如搜索浏览商品)。
  • 测试出系统的各项性能指标(如响应时间)和系统资源(如CPU)消耗情况。直到系统的性能变得不可接受时停止测试。

疲劳测试的方法

目的 : 评估系统在持续高压条件下是否能够保持稳定工作状态,可用于发现内存泄漏、数据库连接池泄漏等资源耗尽的问题。

  • 长时间执行常规压力测试(例如连续24小时),用于测试系统是否能长期稳定运行。

疲劳测试案例

当时在Tomcat中运行Java+jni+c开发生图片程序,业务运行大约两周后发生了Tomcat进程crash(崩溃)。我为了复现问题,采用疲劳测试方法,采用常规压力长时间执行测试,很快就复现了问题。

设计测试场景-缓存案例

性能测试案例主要应用于对Memcached和Redis这类缓存系统的评估。

  • 负载类型 :

    • 用户量负载:指并发数,例如1、10、25、50等不同的并发级别。
    • 数据量负载:具体到请求的数据大小,如每次操作的读写数据量(从1k、4k一直到50k)。【数据量大小对于缓存的性能有较大的影响】
  • 测试步骤 :

    • 对于Memcached和Redis缓存性能进行详细测试,在负载不断增加时记录系统的各项指标(如响应时间)和系统资源(如CPU)占用情况。如:模拟n个并发,每个并发执行业务操作x次,共执行n*x次。
      1. 写入测试:依次1,10,20,30,40,50,60,70,80并发,写入1k,4k,10k,20k,30k,40k,50k数据。每并发操作1000次。
      2. 读取测试:依次1,10,30,50,70,90,110,130并发,读取1k,4k,10k,20k,30k,40k,50k数据。每并发操作1000次。
      3. 混合读写测试(比例为5:5):依次1,10,20,30,40,50,60,70,80并发,混合读写1k,4k,10k,20k,30k,40k,50k数据。每并发操作1000次。
  • 性能指标 :

    • QPS (Queries Per Second): 查询每秒数量,通过测试软件或工具可计算得出。
    • 网络吞吐量:也可以使用nload -u M eth0命令监测网络带宽的利用率。
    • 监测硬盘IO负载情况,可以安装sysstat工具后运行sar -dp 1 10000来获取磁盘I/O使用率( 监测%util)。

停止测试的时机

  • 正常完成测试 : 当所有预期的目标达到时(如完成了所有的并发数量和操作类型)。
  • 资源耗尽或瓶颈出现 :  (但系统资源已耗尽或达到上限值则应停止测试。若强行继续测试,所取得的测试数据是没有变化也没有意义的。)
    • CPU使用率达到上限,处理能力受限。
    • 内存不足甚至发生内存泄漏现象。
    • 网络带宽成为限制因素。
    • 磁盘I/O达到峰值,性能显著下降。