乐趣区

关于java:基于-PTS-压测轻松玩转问题诊断

简介:性能测试 PTS(Performance Testing Service)是具备弱小的分布式压测能力的 SaaS 压测平台,可模仿海量用户的实在业务场景,全方位验证业务站点的性能、容量和稳定性。

作者:智云

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

性能测试 PTS(Performance Testing Service)是具备弱小的分布式压测能力的 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、全链路压测等性能。

疾速玩转问题诊断

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

接入探针,并查看是否接入胜利

首先,咱们将被压场景所波及到的利用梳理进去,将波及到的所有利用依照【问题诊断】->【探针接入[1]】文档中的步骤进行问题诊断探针接入。咱们能够在 PTS 控制台的利用配置或者利用监控、接口监控、机器监控中任选一个来查看利用探针是否接入胜利。咱们本次演示的压测场景波及到五个利用,别离是 petstore-web、petstore-user、petstore-order、petstore-catalog、petstore-cart,这以利用监控举例来查看利用是否胜利接入。顺次点击 PTS 控制台的【问题诊断】->【利用监控[2]】-> 抉择咱们配置的 Region 以及 Namespace,如果看到压测场景波及到的所有利用均在该页面,则代表利用接入胜利。

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

而后,咱们在 PTS 控制台的【压测核心】->【创立场景[3]】中创立压测场景,这里能够抉择 PTS 场景或者 JMeter 场景等,这里以 PTS 场景为例,因为本次演示次要是验证问题诊断的能力,所以须要在场景配置中的【高级设置】中关上问题诊断开关。具体的监控采集规定,PTS 会为用户推送默认采集开关关上的配置,同时,将采样率设置为千分之一,用户也可依据本人的须要进行自定义。

开始压测,查看利用监控

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

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

压测完结后,咱们须要从压测报告中针对被压服务端的问题进行排查,关上对应场景的压测报告,具体步骤:PTS 控制台 ->【压测核心】->【报告列表[4]】,抉择对应的压测报告,能够从概览页中看到全场景的信息,具体如下图所示:

抉择探针采样,查看具体调用链状况

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

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

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

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

压测报告常见错误码总结

问题诊断错误码总结

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

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

com.microsoft.sqlserver.jdbc.SQLServerException:服务端 SQL 报错,可依据调用链采集的堆栈信息对服务端 SQL 语法等进行查看。

压测报告错误码总结

这里针对压测报告中常见的谬误进行列举,咱们能够从全场景错误信息中看到相干的错误信息,具体如下:

class java.net.SocketTimeoutException:null 示意申请在期待响应或者读取中途(idle)超时。请查看服务端健康状况或者 PTS 的压测 API 超时工夫的设置是否正当,另外还有可能是服务端解决能力呈现瓶颈。

class java.net.ConnectException:null 示意申请在与远端(被压测端)建设 TCP 连贯时就呈现失败或者被远端回绝。请查看服务端健康状况,或者是网络连接层是否有瓶颈。

class java.util.concurrent.TimeoutException:null 示意申请在与远端(被压测端)建设 TCP 连贯时就呈现失败或者被远端回绝。请查看服务端健康状况,或者是网络连接层是否有瓶颈。

class org.apache.http.ConnectionClosedException:Connection closed 示意连贯异样敞开,服务端被动敞开了连贯。

class java.io.IOException:Connection reset by peer 示意连贯被重置。若应用了 SLB,请查看 SLB 的配置是否有问题。

class org.apache.http.ConnectionClosedException:Connection closed unexpectedly 示意数据尚未接管结束,连贯就已敞开。可能服务端未及时响应或者提前终止调试或压测。

class java.lang.RuntimeException:java.net.UnknownHostException 示意域名信息无奈解析。请查看域名是否曾经失常注册并能够解析、未注册的域名是否已进行域名绑定。

class org.apache.hc.core5.http.ProtocolException:Header ‘key: value’ is illegal for HTTP/2 messages 示意在服务端优先应用 HTTP2 协定的状况下,场景配置了 HTTP2 协定不反对的 Header,请移除相应 Header 后重试。HTTP2 不反对的常见 Header 有:Connection、Keep-Alive、Proxy-Connection、Transfer-Encoding、Host、Upgrade。

相干链接

[1] 探针接入

https://pts.console.aliyun.co…

[2] 利用监控

https://pts.console.aliyun.co…

[3] 创立场景

https://pts.console.aliyun.co…

[4] 报告列表

https://pts.console.aliyun.co…

原文链接
本文为阿里云原创内容,未经容许不得转载。

退出移动版