编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

IT系统性能测试方案设计(性能测试体系)

wxchong 2024-08-01 03:14:16 开源技术 12 ℃ 0 评论

一. 压测目标

开始一项任务前,需确定一个可测量的目标。对于一个系统,最核心的性能指标莫过于响应时间和吞吐量了,响应时间是指一个请求从发送到接收响应的总时间;吞吐量是指单位时间内系统可以处理的请求数量。这两个指标在资源恒定的情况下,存在互斥关系。

  • 单线程处理下,响应时间和吞吐量的关系为:

吞吐量=1s/响应时间

  • 在多CPU多线程并发技术下,上面的计算公式为:

吞吐量=(1s/响应时间)*并发数

二. 案例解析

1. 需求背景

本例中,IHDMGR 插件管理模块对外提供插件安装和插件列表查询两个接口,ihdmgr依赖于NBIWS调度中心和PROC参数下发模块,由于proc下发参数需要向个设备支持,成本巨大,我们在压测过程中设置了挡板,挡板的延时反映了正常的参数下发平均时延。

根据业务方的描述,我们确定的压测目标为:

  • 插件推送模块能需要每天完成800万设备量的推送任务。
  • 插件推送平均响应时间5s,最大响应时间20s。
  • 插件列表查询平均响应时间为3s,最大响应时间为10s。
  • 可伸缩能力为80%以上。
  • 连续稳定运行24小时。

2. 业务模型分析

由于插件推送和插件列表查询是混合部署的,两类接口的调用频次依据监控系统分析约为8:2。

3. 确定测试类型

  • 基准测试:指的是对单线程接口的测试,主要用于调试测试脚本的正确性 以及在无压力情况下对每个请求的响应时间,作为后续测试复杂场景的基础数据。
  • 容量测试:指的是系统能处理的最大业务量,在测试过程中采用梯度加压的方式不断增加并发回话数,观察响应时间出现拐点的业务量,这个值即为系统能处理的最大业务量。通常需要数个小时进行。
  • 负载测试:测试单个接口在不产生任何错误的情况下能够提供的最佳系统性能。
  • 混合业务测试:按照业务流程对接口调用按照比例进行编排,获得系统的最大处理能力以及单个接口的处理能力。
  • 稳定性测试:按照混合业务测试流程,施压,持续数个小时,判断系统是否健壮,是否存在内存泄露,是否有较多的上下文切换。
  • 异常测试:指的是在依赖服务中断,网络中断,硬件故障等异常情况下,系统对业务的影响情况。检验数据一致性及失效转移是否生效。

4. 加压方式

  • 瞬间加压:通过测试工具模拟大量请求,加压到目标系统接口,主要考验对突发流量的处理能力,同时也为考验是否设计削峰填谷功能,熔断,限流,隔离,失效转移,降级功能是否生效。
  • 逐渐加压:系统的压力通常情况下为一条抛物线,分析各个时段的负载分布情况。
  • 梯度加压:逐渐增加并发量,观察系统的输出能力,找到最佳系统负载组合。
  • 应对压力终止的方式:逐渐退出,立即同时退出。如若立即退出 cpu,内存,io未迅速释放,则说明系统负载有连续性或者关联效应。

5. 确定时延方式

如何发送请求:

  • 一个请求发送完毕立即发送下一个请求
  • 一个请求发送完毕间隔固定时间再发送下一个请求
  • 以一个固定的间隔均衡的发送请求 ---较为常用

6. 压测方案及场景

由于系统目标是每天处理800万设备的插件推送和列表插件任务,所以每秒的吞吐量为:

[800w/(24*60*60)]=92.6个/s=100个。

吞吐量=(1s/响应时间)*并发数=80个=(1s/5s)*插件安装并发量
吞吐量=(1s/响应时间)*并发数=20个=(1s/3s)*插件安装列表查询并发量

编号

接口

占比

基准测试响应时间(单线程,无压力情况下的值)

吞吐量

并发量

1

插件安装

80%

5s

80

400个

2

插件列表查询

20%

3s

20

60个

由于web应用程序的最大并发量为200.故我们使用三梯度加压法进行测试,观察响应时间的变化和基准时间的偏离情况,分布式伸缩是否有效,系统cpu,内存是否在合理范围内。通过多轮的梯度加压数据,找到用户认可的响应时间和吞吐量之间的一个最优组合。同时也为系统并发设定一个推荐值。

编号

批次

接口

占比

测试响应时间

吞吐量

并发量

1

200并发量

插件安装

80%

4s

?40

160个

2

200并发量

插件列表查询

20%

2s

?20

40个

3

400并发量

插件安装

80%

6s

?54

320个

4

400并发量

插件列表查询

20%

4s

?20

80个

5

600并发量

插件安装

80%

8s

?60

480个

6

600并发量

插件列表查询

20%

5s

?24

120个

7.准备测试环境

  • 软硬件环境准备:不可高于生产环境配置。
  • 压测脚本准备
  • 数据准备

8.压测报告生成

  • 系统层面的指标:cpu,内存,磁盘IO,网络带宽,线程数,打开文件句柄数,线程切换和打开的scket数量。
  • 接口的吞吐量,响应时间,错误情况,超时情况。
  • 数据库的慢sql,sql死锁,缓冲区命中率,索引使用情况。
  • 缓存的读写操作的吞吐量,缓存使用量的增加数量,响应时间,超时情况。
  • 消息队列的吞吐量变化情况,响应时间。

压测报告的内容:

  • 压测过程中记录的数据
  • 分析是否满足既定目标
  • 系统瓶颈点
  • 系统潜在风险
  • 改进意见。

三.压测常用工具

  • ab:一款针对http实现性能压测的工具。可以进行简单的restful风格接口测试
ab -c 10 -n 10000 http://localhost:8080/index
ab -c 10 -n 1000 -p post.txt 'application/x-www-form-urlencoded' http://localhost:8080/billing/account/update
  • jmeter
  • mysql-tpcc
  • mysqlslap:mysql自带的一款性能压测工具
# 单线程连接测试
mysqlslap -a uroot -ptest dbname
# 使用10个线程测试,代表10个客户端
mysqlslap -a -c 10 uroot -ptest dbname
# 多次测试对测试结果求平均值
mysqlslap -a -i 10 -uroot -ptest
# 测试读操作的性能指标,10个客户端,每个客户端并发100次查询。数据库连接重用。
mysqlslap -a -c 10 --number-of-queries=1000 --auto-generate-sql-load-type=read -uroot -ptest
#测试写操作性能
mysqlslap -a -c 10 --number-of-queries=1000 --auto-generate-sql-load-type=write -uroot -ptest
# 混合读写
mysqlslap -a -c 10 --number-of-queries=1000 --auto-generate-sql-load-type=mixed -uroot -ptest
# 多次不同并发混合操作的性能指标,不同引擎,分别产生50,100个并发
mysqlslap -a --concurrency=50,100 --number-of-queries=1000 --debug-info--engine=myisam,innodb --iterations=5 -uroot -ptest
  • sysbench
# sysbench的fileio测试需要经过prepare,run,cleanup三个阶段
sysbench --test=fileio help
# 进行16个文件,总大小2GB的fileio测试:
sysbench --test=fileio --file-num=16 --file-total-size=2G  prepare
# 16线程下随机读取性能。最大随机读取请求为:10000000,如果在180秒内不能完成,测试就结束了。
sysbench --test=fileio --file-total-size=2G --file-test-mode=rndrd  --max-time=180 --max-requests=10000000 --num-threads=16 --init-rng=on
--file-num=16 --file-extra-flags=direct --file-fsync-freq=0 --file-block-size=16384 run
# 清理测试程序
sysbench --test=fileio --file-num=16 --file-total-size=2G cleanup

# cpu 性能测试
sysbench --test=cpu --cpu-max-prime=20000 run
# 线程锁性能测试
sysbench --test=treads --num-threads=64 --thread-yields=100 --thread-locks=2 run
# 磁盘io性能测试,iops测试
sysbench --test=fileio --file-num=16 --file-total-size=100M prepare
sysbench --test=fileio --file-num=16 --file-total-size=100M cleanup
# 内存测试
sysbench --test=memory --num=threads=512 --memory-block-size=256M  --memory-total-size=2000M run
# mysql 事务性操作测试
sysbench --test=oltp --mysql-table-engine=myisam --oltp-table-size=1000 --mysql-user=root --mysql-host=localhost --mysql-password=test --mysql-db=test run
  • dd:磁盘io测试。
  • loadRunner
  • hprof:jdk自带的内存堆栈和cpu使用情况命令行工具。
  • locust:
  • 全链路监控工具:skywalking,pinpoint,zipkin。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表