简介:性能测试 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] 探针接入

阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台

[2] 应用监控

阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台

[3] 创建场景

阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台

[4] 报告列表

阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台

原文链接

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

基于 PTS 压测轻松玩转问题诊断的更多相关文章

  1. 阿里云PTS分享-用性能测试工具JMeter实现基于供应链业务上对于WebSocket 协议的压测

    性能测试PTS(Performance Testing Service)是面向所有技术相关背景人员的云化性能测试工具,孵化自阿里内部平台.有别于传统工具的繁复,PTS以互联网化的交互,面向分布式和云化 ...

  2. 案例 | 荔枝微课基于 kubernetes 搭建分布式压测系统

    王诚强,荔枝微课基础架构负责人.热衷于基础技术研发推广,致力于提供稳定高效的基础架构,推进了荔枝微课集群化从0到1的发展,云原生架构持续演进的实践者. 本文根据2021年4月10日深圳站举办的[腾讯云 ...

  3. 真刀真枪压测:基于TCPCopy的仿真压测方案

    郑昀 基于刘勤红和石雍志的实践报告 创建于2015/8/13 最后更新于2015/8/19 关键词:压测.TCPCopy.仿真测试.实时拷贝流量 本文档适用人员:技术人员 提纲: 为什么要做仿真测试 ...

  4. 基于Dubbo的压测调优实例

    不久前参与开发了一个基于dubbo分布式框架的底层账单系统,并实现了其中的一部分业务接口,目前需对这些接口进行压测,以评估生产环境所能承受的最大吞吐量.笔者以其中一个查询接口为例来回顾此次压测的整体流 ...

  5. 阿里巴巴高可用技术专家襄玲:压测环境的设计和搭建 PTS - 襄玲 云栖社区 今天

    阿里巴巴高可用技术专家襄玲:压测环境的设计和搭建 PTS - 襄玲 云栖社区 今天

  6. 实现理论上无tps上限的分布式压测(基于Jmeter+InfluxDB+Grafana+Spring Boot)

    JMeter自身带有Master-Slave压测框架,对于并发量不是很高的压力情况下(比如tps低于5000),该方案是可行的,并且使用起来非常方便,只要在配置文件或者命令行工具的参数做一些补充,即可 ...

  7. dapi 基于Django的轻量级测试平台六 怎样使用压测功能

    QQ群: GitHub:https://github.com/yjlch1016/dapi JMeter非GUI模式下: jmeter -n -t jmx脚本 -l jtl文件 -e -o 测试报告目 ...

  8. 基于Locust实现MQTT协议服务的压测脚本

    最近在忙业务的间隙,穿插着做了些性能测试. 一.背景简介 业务背景大概介绍一下,就是按照国标规定,车辆需要上传一些指定的数据到ZF的指定平台,同时车辆也会把数据传到企业云端服务上,于是乎就产生了一些性 ...

  9. 6. 堪比JMeter的.Net压测工具 - Crank 实战篇 - 收集诊断跟踪信息与如何分析瓶颈

    目录 堪比JMeter的.Net压测工具 - Crank 入门篇 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识yml 堪比JMeter的.Net压测工具 - Crank 进阶篇 ...

  10. 业界压测平台与JMeter的对比

    压测平台是什么? 压测,即压力测试,作用是对各种服务对象进行压力测试以获得该服务处于或超过预期负载时系统的运行情况,进而判断系统在峰值负载或超出最大负载情况下的处理能力. 压测工具,顾名思义,就是用来 ...

随机推荐

  1. 三维模型OBJ格式轻量化的跨平台兼容性问题分析

    三维模型OBJ格式轻量化的跨平台兼容性问题分析 三维模型的OBJ格式轻量化在跨平台兼容性方面具有重要意义,可以确保模型在不同平台和设备上的正确加载和渲染.本文将分析OBJ格式轻量化的跨平台兼容性技术, ...

  2. 记录--Vue自动生成组件名

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 unplugin-generate-component-name 一款用于以文件夹名或者setup标签写入名字来自动生成Vue组件名的插件 ...

  3. 记录--让URL地址都变成了"ooooooooo"

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 发现一个很有创意的小工具网站,如封面图所示功能很简单,就是将一个URL地址转换为都是 ooooooooo 的样子,通过转换后的地址访问可以 ...

  4. r-nacos v0.4.0版本发布

    r-nacos是一个用 rust重新实现的nacos. r-nacos比java实现的nacos更轻量.快速.稳定:合适在开发.测试.受资限服务等环境平替nacos服务使用. r-nacos v0.4 ...

  5. 开源鸿蒙(OpenHarmonyOS)代码下载及编译

    开源鸿蒙的代码仓在码云上,可以通过以下命令下载源码并编译 本机安装虚拟机 如本地已经安装可以忽略此步 安装指导:https://thoughts.teambition.com/share/614c49 ...

  6. 配置腾讯云轻量级linux服务器用到的资源和步骤

    pasv_address=82.157.112.34 #请修改为您的 Linux 云服务器公网 IPsftp://82.157.112.34:21 ①下载系统可视化https://cloud.tenc ...

  7. 【已解决】解决Python打开文件---路径报错问题(SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape)

    原因分析: 在windows系统当中读取文件路径可以使用\,但是在python字符串中\有转义的含义, 如\t可代表TAB,\n代表换行, 所以我们需要采取一些方式使得\不被解读为转义字符.目前有3个 ...

  8. 大数据hadoop Linux 相关常用命令行操作

    bin/zkServer.sh start bin/zkServer.sh stop 启动Hadoop 1 hadoop102 sbin/start-dfs.sh 2 hadoop103 sbin/s ...

  9. 从优秀到卓越:成为DevOps专家的7项软技能

    在我的职业生涯中,遇见过许多专业人士,他们在技术上非常健全,对自己的领域和技术有很好的掌握和专业知识,但是由于缺乏软技能,他们错过了晋升.现场机会.高级技术面试以及职业生涯中的机会.很震惊吧,技术好却 ...

  10. 上海站报名启动! 2023年开源产业生态大会OpenHarmony生态分论坛

      作为年内开源领域不容错过的科技盛宴,2023年开源产业生态大会将于12月19日在上海盛大开幕.本次活动由上海市经济和信息化委员会.上海市科学技术协会和"科创中国"开源创新联合体 ...