Java应用压测定位性能问题

一、什么是压测

压测,即压力测试,是确立系统稳定性的一种测试方法,通常在系统正常运作范围之外进行,以考察其功能极限和和可能存在的隐患。

压测主要用于检测服务器的承受能力,包括用户承受能力,即多少用户同时使用系统时基本不影响质量、流量承受等。另外,通过诸如疲劳测试还能发现系统一些稳定性的问题,比如是否存在连接池中的连接被耗尽,内存被耗尽,线程池被耗尽,这些只能通过疲劳测试来进行发现定位。

二、为什么要压测

压测的目的就是通过模拟真实用户的行为,测算出机器的性能(单台机器的 QPS、TPS),从而推算出系统在承受指定用户数(100 W)时,需要多少机器能支撑得住。

因此在进行压测时一定要事先设定压测目标值,这个值不能太小,也不能太大,按照目前业务预估的增长量来做一个合理的评估。

压测是在上线前为了应对未来可能达到的用户数量的一次预估(提前演练),压测以后通过优化程序的性能或准备充足的机器,来保证用户的体验。压测还能探测应用系统在出现交易洪峰时稳定性情况,以及可能出现的一些问题,发现应用系统薄弱一环,从而更有针对性地进行加强。

三、压测分类

Java应用压测定位性能问题插图

这几种测试可以穿插进行,一般会在压力测试性能指标达标后,再安排耐久性测试。

四、压测名词解释

Java应用压测定位性能问题插图2

五、常见的压测工具

1、ab

ApacheBench 是 Apache 服务器自带的一个 web 压力测试工具,简称 ab。ab 又是一个命令行工具,对发起负载的本机要求很低,根据 ab 命令可以创建很多的并发访问线程,模拟多个访问者同时对某一 URL 地址进行访问,因此可以用来测试目标服务器的负载压力。总的来说 ab 工具小巧简单,上手学习较快,可以提供需要的基本性能指标,但是没有图形化结果,不能监控。

2、Jmeter

Apache JMeter 是 Apache 组织开发的基于 Java 的压力测试工具。用于对软件做压力测试,它最初被设计用于 Web 应用测试,但后来扩展到其他测试领域。

  • JMeter 能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。
  • JMeter 的功能过于强大,这里暂时不介绍用法,可以查询相关文档使用(参考文献中有推荐的教程文档)

3、LoadRunner

LoadRunner 是 HP(Mercury)公司出品的一个性能测试工具,功能非常强大,很多企业级客户都在使用,具体请参考官网链接。

4、阿里云PTS

性能测试 PTS(Performance Testing Service)是一款性能测试工具。支持按需发起压测任务,可提供百万并发、千万 TPS 流量发起能力,100% 兼容 JMeter。提供的场景编排、API 调试、流量定制、流量录制等功能,可快速创建业务压测脚本,精准模拟不同量级用户访问业务系统,帮助业务快速提升系统性能和稳定性。

作为阿里内部使用多年的性能测试工具,PTS 具备如下特性:

  • 免运维、开箱即用。SaaS化施压、最大支持百万级并发、千万级TPS流量自助发起能力。
  • 支持多协议HTTP1.1/HTTP2/JDBC/MQTT/Kafka/RokectMq/Redis/Websocket/RMTP/HLS/TCP/UDP/SpringCloud/Dubbo/Grpc 等主流协议。
  • 支持流量定制。全球施压地域定制/运营商流量定制/IPv6 流量定制。
  • 稳定、安全。阿里自研引擎、多年双十一场景打磨、支持 VPC 网络压测。
  • 性能压测一站式解决方案。** 0 编码构建复杂压测场景,覆盖压测场景构建、压测模型设定、发起压力、分析定位问题、出压测报告完整的压测生命周期。
  • 100% 兼容开源 JMeter。
  • 提供安全、无侵入的生产环境写压测解决方案。

六、压测工具的比较

Java应用压测定位性能问题插图4

七、如何选择压测工具

这个世界上没有最好的工具,只有最适合的工具,工具千千万,选择一款适合你的才是最重要的,在实际使用中有各种场景,可以结合压测步骤来确定适合自己的工具:

  • 确定性能压测目标:性能压测目标可能源于项目计划、业务方需求等
  • 确定性能压测环境:为了尽可能发挥性能压测作用,性能压测环境应当尽可能同线上环境一致
  • 确定性能压测通过标准:针对性能压测目标以及选取的性能压测环境,制定性能压测通过标准,对于不同于线上环境的性能压测环境,通过标准也应当适度放宽
  • 设计性能压测:编排压测链路,构造性能压测数据,尽可能模拟真实的请求链路以及请求负载
  • 执行性能压测:借助性能压测工具,按照设计执行性能压测
  • 分析性能压测结果报告:分析解读性能压测结果报告,判定性能压测是否达到预期目标,若不满足,要基于性能压测结果报告分析原因

由上述步骤可知,一次成功的性能压测涉及到多个环节,从场景设计到施压再到分析,缺一不可。工欲善其事,必先利其器,而一款合适的性能工具意味着我们能够在尽可能短的时间内完成一次合理的性能压测,达到事半功倍的效果。

八、JAVA应用性能问题排查指南

参考:Java应用性能问题排查指南

九、总结

问题千千万,但只要修练了足够深厚的内功,形成一套属于自己的排查问题思路和打法,再加上一套支撑问题排查的工具,凭借已有的经验还有偶发到来的那一丝丝灵感,相信所有的问题都会迎刃而解。

发表评论