性能测试是开发运维过程中,用于预估系统性能瓶颈的常规手段,本文来自 PTS 用户 叶康铭 在迁移企业网站过程中的性能压测实践,分为业务场景、业务指标、业务流程、压测配置信息和压测过程及结论 5 部分。
一、业务场景
日常任务管理网站从本地 IDC 机房迁移上云时,需要提前评估系统的性能瓶颈。
二、业务指标
满足对集团内的1000用户的并发访问;
300用户数并发对日程进行创建、修改、删除等操作;
100用户数并发登录;
在并发较高的情况下,用户不需要等待过长时间;
三、业务流程
用户登录:登录用户的信息来自文件输入;
创建日程:日程信息为随机生成;
日程修改:由上一个创建事件输出的 ID 进行修改;
查看日程:随机获取月、周、日的日程信息;
四、压测配置信息
1. 资源包购买:因目标是各 API 的并发之和为2000,故购买峰值5000并发的资源包;
2. 业务上是一个流式过程,故放在一个串联链路中,按照业务模型进行 API 配置:
i.接口:login,输入参数:username、password,来源文件参数;
ii.接口:newSchedule,输入参数:taskInfo,输出参数:taskID, eventState;
iii.接口:setSchedule,输入参数:taskID, taskInfo,输出参数eventState;
iv.接口:getSchedule,输入参数:taskID,输出参数:taskInfo, eventState;
v.接口:delSchedule,输入参数:taskID,输出参数:eventState;
3. 压力配置:并发模式,每个API按照 100:300:300:1000:300的最大并发配置,起步设为10%;
4. 监控信息:采用 PTS 集成的监控功能;
五、压测过程及结论
1. 第一次压测,按照10%的施压配置进行测试,每次递增10%(每次持续1分钟),到40%时开始发现,和日程相关的 API 请求成功率开始下降,经DMS、CloudMonitor等工具排查后,诊断为数据库死锁导致。
经过分析,死锁原因是项目中事务调用产生的 PAG 范围锁引起,经过优化后恢复正常。
2. 第二次压测,直接全局调速40%, 当压力测试进行到80%时,云监控上见到的ECS、RDS内存消耗超过90%,RT明显增高到4000+ms,并初现超时的情况。
通过增加4个 ECS 节点,并对 RDS 进行升配,从而解决问题。
3. 第三次压测,直接全局调速70%, 整体系统运行正常,施压到100%时getSchedule偶发会出现 RT 过大或者直接错误的问题。经过一系列排查,该 API 调用参数范围过大时会导致处理时间过长或者直接提示超时。
调整 Tomcat 连接超时时长,并对该 API 输入参数范围进行限制,解决了该问题。
4. 第四次压测,施压配置从10%升高到100%,压测过程中,在100%压测5分钟的情况下,系统 RT 稳定,无失败的情况出现,系统利用率较好。
六、亲测感受:
优势:
文档详细,开箱即用,配置及操作简单,可在控制台上完成一系列的操作。
产品细节:
域名绑定 IP 即可对单点做性能测试,例如实例及 ARMS 监控集成,都方便了开发者在压测时的操作,再例如可以动态去调速全局或单个串联链路,提升了测试效率。
关于并发虚拟用户、RPS、TPS的区别可以参考官方文献:
https://help.aliyun.com/document_detail/29343.html
加微信群,和PTS面对面
文章缩略图
© Photo by Spencer Wing on Unsplash
©每周一推
第一时间获得下期分享
☟☟☟
Tips:
# 点下“在看”❤️
# 然后,公众号对话框内发送“Polo衫”,试试手气??
# 本期奖品是 Aliware 定制 Polo衫。