基于 PTS 压测轻松玩转问题诊断
发布时间:2022-01-19 点击数:968
作者:智云
为什么要做压测的问题定位?
Cloud Native
性能测试 PTS(Performance Testing Service)是具备强大的分布式压测能力的 SaaS 压测平台,可模拟海量用户的真实业务场景,全方位验证业务站点的性能、容量和稳定性。
在不断的对被压服务端水位进行摸高的过程中,我们可以从压测视图或者压测报告中看到较为全面的压测指标,例如 QPS、RT、TPS 等,但是单纯从这些指标上,是不能很快的定位到服务端具体问题所在的,例如,我们从全场景错误信息中心可以看到错误码对应的接口的响应体,但是具体在下游的哪一环节出错,以及错误的堆栈是什么,这里单纯从报告中是看不到的,而接口下游具体是哪里出错,错误堆栈是什么,正是用户所关心的问题。
借助问题诊断,我们可以明确被压接口的上下游的调用情况,同时,从链路视图上,我们可以看到整条链路所经过的消息组件(Kafka、RocketMQ 等)、缓存(Redis、MongoDB 等)、数据库(MySQL、Oracle 等)、RPC 调用(Feign、Dubbo、HttpClient 等),例如,某个接口出现状态码异常或者其他的错误,那么,我们可以从调用链上看到到底是 Rpc 调用出现问题,还是数据库读写出现问题,并且能够从调用链上看到对应的报错堆栈,在这些信息的基础上,问题应该去哪里定位也就比较明确了。
问题诊断基本介绍和核心优势
Cloud Native
1 基本介绍
谈到问题诊断,用户主要关心接入问题诊断是否需要对应用侧代码做一系列的改造,是否需要进行繁杂的配置等等。PTS 提供的问题诊断是基于 JavaAgent 的,无需用户侧做业务代码改造,对于基于 Tomcat 的部署方式,用户只需在启动脚本中添加一些必要的参数即可接入问题诊断;对于 Kubernetes 用户,用户只需在 Yaml 配置文件中添加一些必要的注解即可接入问题诊断。对于链路的采集规则,PTS 会提供默认的配置,用户也可根据自己的需要自行更改。
PTS 集成的问题诊断在压测过程中,针对每条请求,会在施压引擎端生成 TraceId,通过 TraceId 将该条请求所涉及到的上下游链路关联起来,用户可以看到从该条请求作为入口到本条请求结束所涉及到的完整调用链,同时,问题诊断会针对该调用链生成相应的应用拓扑视图,可以让用户清晰地看到应用之间的调用关系。
2 核心优势
1、零代码侵入:针对 Java 类型的服务,用户侧无需进行业务侧代码改造即可完成问题诊断的探针接入。
2、集成度高:压测、监控、问题诊断,集成在同一控制台,用户理解和操作成本相对较低。
3、监控指标全:在压测过程中,除了较为基础的监控指标外,同时针对每个服务,提供接口、机器、应用级别的监控。
4、门槛低:仅需要简单配置参数即可完成问题诊断探针接入,同时该探针还具备多协议 Mock、全链路压测等功能。
快速玩转问题诊断
Cloud Native
压测报告常见错误码总结
Cloud Native
1 问题诊断错误码总结问题诊断调用链路中的常见错误码进行总结,具体如下:
- java.lang.NullPointerException:服务端空指针,具体可根据调用链中的错误堆栈对服务端的代码进行排查。
-
- com.microsoft.sqlserver.jdbc.SQLServerException:服务端 SQL 报错,可根据调用链采集的堆栈信息对服务端 SQL 语法等进行检查。
2 压测报告错误码总结
- 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。
05
相关链接
Cloud Native