竹笋

首页 » 问答 » 环境 » 基于PTS压测轻松玩转问题诊断
TUhjnbcbe - 2024/6/7 19:54:00

为什么要做压测的问题定位?

性能测试PTS(PerformanceTestingService)是具备强大的分布式压测能力的SaaS压测平台,可模拟海量用户的真实业务场景,全方位验证业务站点的性能、容量和稳定性。

在不断的对被压服务端水位进行摸高的过程中,我们可以从压测视图或者压测报告中看到较为全面的压测指标,例如QPS、RT、TPS等,但是单纯从这些指标上,是不能很快的定位到服务端具体问题所在的,例如,我们从全场景错误信息中心可以看到错误码对应的接口的响应体,但是具体在下游的哪一环节出错,以及错误的堆栈是什么,这里单纯从报告中是看不到的,而接口下游具体是哪里出错,错误堆栈是什么,正是用户所关心的问题。

借助问题诊断,我们可以明确被压接口的上下游的调用情况,同时,从链路视图上,我们可以看到整条链路所经过的消息组件(Kafka、RocketMQ等)、缓存(Redis、MongoDB等)、数据库(MySQL、Oracle等)、RPC调用(Feign、Dubbo、HttpClient等),例如,某个接口出现状态码异常或者其他的错误,那么,我们可以从调用链上看到到底是Rpc调用出现问题,还是数据库读写出现问题,并且能够从调用链上看到对应的报错堆栈,在这些信息的基础上,问题应该去哪里定位也就比较明确了。

问题诊断基本介绍和核心优势

基本介绍

谈到问题诊断,用户主要关心接入问题诊断是否需要对应用侧代码做一系列的改造,是否需要进行繁杂的配置等等。PTS提供的问题诊断是基于JavaAgent的,无需用户侧做业务代码改造,对于基于Tomcat的部署方式,用户只需在启动脚本中添加一些必要的参数即可接入问题诊断;对于Kubernetes用户,用户只需在Yaml配置文件中添加一些必要的注解即可接入问题诊断。对于链路的采集规则,PTS会提供默认的配置,用户也可根据自己的需要自行更改。

PTS集成的问题诊断在压测过程中,针对每条请求,会在施压引擎端生成TraceId,通过TraceId将该条请求所涉及到的上下游链路关联起来,用户可以看到从该条请求作为入口到本条请求结束所涉及到的完整调用链,同时,问题诊断会针对该调用链生成相应的应用拓扑视图,可以让用户清晰地看到应用之间的调用关系。

针对异常的接口,我们可以在调用链中看出对应的错误原因,同时,用户可以根据具体的报错堆栈对服务端的问题进行排查和优化。压测过程中用户可以实时的查看指定请求的调用链,同时,压测结束之后,也可以从压测报告中对问题进行回溯。

核心优势

1、零代码侵入:针对Java类型的服务,用户侧无需进行业务侧代码改造即可完成问题诊断的探针接入。

2、集成度高:压测、监控、问题诊断,集成在同一控制台,用户理解和操作成本相对较低。

3、监控指标全:在压测过程中,除了较为基础的监控指标外,同时针对每个服务,提供接口、机器、应用级别的监控。

4、门槛低:仅需要简单配置参数即可完成问题诊断探针接入,同时该探针还具备多协议Mock、全链路压测等功能。

快速玩转问题诊断

接入问题诊断的基本流程图如下所示:

接入探针,并查看是否接入成功

首先,我们将被压场景所涉及到的应用梳理出来,将涉及到的所有应用按照-文档中的步骤进行问题诊断探针接入。我们可以在PTS控制台的应用配置或者应用监控、接口监控、机器监控中任选一个来查看应用探针是否接入成功。我们本次演示的压测场景涉及到五个应用,分别是petstore-web、petstore-user、petstore-order、petstore-catalog、petstore-cart,这以应用监控举例来查看应用是否成功接入。依次点击PTS控制台的--选择我们配置的Region以及Namespace,如果看到压测场景涉及到的所有应用均在该页面,则代表应用接入成功。

在压测场景中打开问题诊断开关

然后,我们在PTS控制台的-中创建压测场景,这里可以选择PTS场景或者JMeter场景等,这里以PTS场景为例,因为本次演示主要是验证问题诊断的能力,所以需要在场景配置中的中打开问题诊断开关。具体的监控采集规则,PTS会为用户推送默认采集开关打开的配置,同时,将采样率设置为千分之一,用户也可根据自己的需要进行自定义。

开始压测,查看应用监控

完成了以上步骤,我们的压测场景即具备了问题诊断的能力。当我们点击开始压测之后,可以到应用监控、接口监控、机器监控中选择我们关心的服务查看对应的监控情况,这里以应用监控[2]为例,其他类型的监控操作步骤类似,我们选择petstore-user这个服务来查看应用监控,如下图所示:

压测结束后,查看全场景错误信息

压测结束后,我们需要从压测报告中针对被压服务端的问题进行排查,打开对应场景的压测报告,具体步骤:PTS控制台--,选择对应的压测报告,可以从概览页中看到全场景的信息,具体如下图所示:

选择探针采样,查看具体调用链情况

点击,采样类型选择”探针采样“即可过滤出问题诊断探针所采集到的调用链,具体如下图所示:

查看调用链具体错误堆栈信息,定位服务端问题所在

筛选出来探针端采集的调用链之后,即可对存在问题的接口进行调用链分析,例如,商品列表的接口返回的状态码为,点击查看详情看下具体原因,如下图所示:

从调用栈中可以看到具体的报错原因,从而对服务端代码进行优化和修复。同时,可以通过应用拓扑视图和数据库视图查看服务之间的调用情况以及数据库使用情况,这里以应用拓扑视图举例,如下图所示:

压测报告常见错误码总结

问题诊断错误码总结

问题诊断调用链路中的常见错误码进行总结,具体如下:

java.lang.NullPointerException:服务端空指针,具体可根据调用链中的错误堆栈对服务端的代码进行排查。

1
查看完整版本: 基于PTS压测轻松玩转问题诊断