搭建全链路jmeter压测服务

本文涉及的产品
性能测试 PTS,5000VUM额度
简介: 无论是信息流产品中的热点事件还是电商领域的双十一促销活动,最为直接的现象就是高流量来袭。 那么针对该问题我们如何提前准备预案来应对呢? 全链路压测便是破解以上难题必不可少的一个环节,它也被工业界广泛定义为核武器。

一、背景介绍

为什么需要压测服务?首先,我们需要搞清楚做压力测试这件事情的意义。使用压力测试的本质是基于实际的生产业务场景、系统环境,模拟海量的用户请求和数据对整个业务链进行压力测试并持续调优,而压力测试的意义则在于保障生产环境服务的可用性。
在日常研发流程中,每个工程师除了编写代码、review代码、提交代码、单元测试、集成测试外,还需要负责对自己所编写的功能模块进行24小时或者72小时的压力测试。压测除了可以验证逻辑是否正确外,还能暴露出是否有性能短板。比如原功能模块平均响应时间为200ms,在新代码逻辑加入后平均响应时间有没有出现较大波动尤其是耗时有没有明显增加。耗时增加会带来整个服务的抖动、熔断、甚至于降级。
压测服务除了具备管控研发流程意义外,更重要的是可以对线上服务容量评估。
简单想象一个信息流业务场景,当百万或者千万级别用户主动刷新浏览新闻,这背后实际上是海量的并发性请求,请求行为会从CDN到web接入层、前端应用、后端服务、DB缓存、存储、中间件等,整条链路都会面临着请求流量。无论服务部署环境是公有云、专有云、混合云还是自建IDC,高并发带来的问题挑战,需要我们能够全局瓶颈识别,对待业务容量评估和资源规划可以做到尽可能客观。
总所周知,应用的服务状态除了会受到自身稳定性的影响,还会受到流量等环境因素的影响,比如热点新闻、重大运营活动、常规流量峰值时间段(早上08:00~10:00、晚上20:00~23:00)。以上的未知情况带来的影响面会传递到服务的上下游,上下游某个环节如果出现了评估误差,会带来成倍的影响,最终可能会导致服务灾难性的影响。

二、压测工具选择
Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。
使用JMeter 进行压测,只需要设置较少的参数即可。核心的参数有压测QPS、压测时长、压测IP、压测端口等。
打开,conf.jmx文件,修改以下配置信息:

image.gif

图一:配置压测qps与压测时长

image.gif

图二:目标机器与端口

三、压测展示
压测前,我们提前准备好api调用时所使用的测试url,为了保证压测可以尽可能还原真实情况,建议使用真实的用户uid来进行仿真测试。测试url为1w 条即可。 压测配置文件设置完成后,便可以运行启动脚本。 如sh run_start.sh。测试脚本启动后,并可以观察目标机器的负载情况了。

**压测细节如下:
压力测试目标:推荐引擎的排序服务、召回服务
压力测试qps:300
目标机器型号:阿里云 ECS ecs.g6.8xlarge
配置:cpu 32核/内存 128GB/系统盘40GB 数据盘500GB**

image.png

image.jpeg

image.jpeg

从上图可以看到,压测开始后cpu与内存的监控曲线开始飙升。经24小时持续压测后,相关性能指标满足生产环境标准。同时也验证得出阿里云ECS 满足高并发极限条件下的稳定性考核。

四、未来展望
目前,全链路压测的自动化只是针对测试执行范畴,还有很多工作需要人工干预,未来希望能够将自动化的脚步覆盖到测试前和测试后,真正建设出全链路压测的自动化生态体系。与此同时,我们正在调研阿里云性能测试PTS工具(云产品),以此释放出这部分工作的人力,可让工程师更加专注业务研发。

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
目录
相关文章
|
3月前
|
缓存 Java 测试技术
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
使用JMeter对项目各个接口进行压力测试,并对前端进行动静分离优化,优化三级分类查询接口的性能
101 10
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
|
7月前
|
消息中间件 Java 测试技术
性能工具之Jmeter扩展函数及压测ActiveMQ实践
【5月更文挑战第18天】性能工具之Jmeter扩展函数及压测ActiveMQ实践
112 5
|
4月前
|
存储 监控 数据可视化
性能监控之JMeter分布式压测轻量日志解决方案
【8月更文挑战第11天】性能监控之JMeter分布式压测轻量日志解决方案
97 0
性能监控之JMeter分布式压测轻量日志解决方案
|
7月前
|
监控 数据可视化 测试技术
性能工具之JMeter+InfluxDB+Grafana打造压测可视化实时监控
【5月更文挑战第23天】性能工具之JMeter+InfluxDB+Grafana打造压测可视化实时监控
621 6
性能工具之JMeter+InfluxDB+Grafana打造压测可视化实时监控
|
5月前
|
测试技术 Linux
linux 服务器运行jmeter 进行服务性能压测
linux 服务器运行jmeter 进行服务性能压测
413 0
|
6月前
|
JSON Java 测试技术
必知的技术知识:Jmeter压测工具使用手册(完整版)
必知的技术知识:Jmeter压测工具使用手册(完整版)
|
7月前
|
网络协议 JavaScript 前端开发
性能工具之Jmeter压测Hprose RPC服务
【5月更文挑战第19天】性能工具之Jmeter压测Hprose RPC服务
81 5
|
7月前
|
JSON JavaScript Java
性能工具之Jmeter压测Thrift RPC服务
【5月更文挑战第21天】性能工具之Jmeter压测Thrift RPC服务
109 1
|
6月前
|
测试技术 Linux Apache
掌握JMeter参数化技巧:通过CSV文件实现高效登录压测
在本文中,我们将探讨如何使用 Apache JMeter 通过 CSV 数据文件进行登录性能测试参数化。首先创建一个包含用户名和密码的 `users.csv` 文件。接着在 JMeter 中,创建测试计划,添加线程组,配置 CSV 数据集,设置文件路径、编码及变量名。然后,创建 HTTP 请求并添加参数,使用 `${username}` 和 `${password}` 引用 CSV 中的数据。最后,添加监听器如查看结果树和聚合报告以分析测试结果。通过这种方法,能更有效地模拟真实用户行为,提高测试覆盖率,助力性能瓶颈的发现和优化。
|
2月前
|
测试技术 持续交付 Apache
Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
【10月更文挑战第1天】Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
149 3