如何利用快照( snapshot )功能快速定位性能问题

咱们经常会遇到这样的困惑,收到用户或者客服的反馈,平台使用有问题,可是测试人员搭建环境后又没办法复现故障,最后致使问题无法解决,眼睁睁地看着用户流失。html

这是由于线上生产环境很是复杂、不少时候是偶发性 bug ,但却很难捕捉。特别是随着微服务盛行,系统复杂度增长,线上故障的快速定位和及时分析解决面临着巨大挑战,之前只能靠人来解决。可是人的问题解决能力与速度依赖于经验,有时候甚至须要跨部门的配合,这样的成本很是高,一旦关键人员流失、部门配合不融洽,整个故障的解决速度就会极速降低。java

这时候我要给你们带来一款好用的性能分析工具- Application Insight (应用性能管理平台,如下简称 Ai ),至于它能干什么呢?往下看你就知道了~web

 trace & snapshot 功能介绍

01业务运行中有哪些错误呢?

在代码运行中,经常会遇到这几类型问题:sql

JVM数据库

常见的好比 oom 内存溢出、内存泄漏、gc pause 、磁盘运行不足等api

● 数据库性能优化

常见的好比数据库负载繁忙、数据库服务器超负载、单一 sql 语句执行缓慢、数据库链接池获取时间长、对数据库链接池的访问次数过多等服务器

● 外部服务微信

常见的好比外部服务网络问题、不一样应用之间的调用阻塞、索引设置不合适等网络

● 其它问题

上面都是咱们常见的场景,可是还有一些问题是深深的潜藏在程序中,须要咱们深刻地分析代码才能找到缘由。

线程死锁、循环操做、事务异常、jvm crash 等

02什么是 trace ?

trace 收集程序运行时的信息来查询程序运行状况,定位代码中须要修改和优化的部分,提升代码运行速度,提高用户体验。

业内经常使用的方法有以下三种:

● 事件方法

在 Java 语言中,使用 jvmti( jvm tools interface )api 方法来捕捉诸如方法调用、类载入、类卸载、进入离开线程等事件,而后再基于这些事件进行代码行为的分析。

● 统计抽样

每隔一段事件中断调用系统,收集当前的调用栈信息,记录调用栈中出现的函数及这些函数的调用结构,基于这些信息获得函数的调用关系图及每一个函数的 cpu 使用信息。

● 插码

在目标程序中插入指令代码,这些指令代码会记录程序运行的开始时间、结束时间等,再通过统计得出函数调用状况、函数 cpu 使用状况。

03 AI 的 trace

Ai 采用插码与快照(统计抽样)的方式来实现 trace ,trace 包括慢 trace 、错误 trace 、sql trace 、snapshot 四类:

● 慢 trace

在用户的事务响应时间超过阈值的时候去进行采集。系统默认是2秒,但用户能够根据本身实际状况在 Ai 的“设置-慢事务”处进行设置。 

● 错误 trace

当程序运行异常或直接报错时,咱们会直接采集错误 trace,还原现场。

● Sql trace

在平台开启慢 sql 追踪,并设置慢 sql 追踪阈值,当 sql 的性能大于该阈值的时候,agent 记录慢 sql 的堆栈信息。默认为0.5s,用户能够根据本身实际状况在 Ai 的“设置-数据库”进行设置。

同时用户能够开启 sql 执行计划,对于执行缓慢的 sql 进行抓取。

● snapshot

snapshot 实现原理为在客户业务运行缓慢时对调用进行屡次代码快照,而且进行方法、耗时分析,得出快照 trace 。

采集规则为 web 事务连续两分钟的平均响应时间超过4*apdex_T(默认两秒),且每分钟的快照数不超过1个。

用户无需作任何配置,便可使用此功能,还能够根据业务动态调整阈值。

用户案例分析

01问题类型:链接服务被拒绝

1)问题现象:用户反馈没法退出登陆

2)问题调查和分析

a:登陆平台查看登出的接口状况

登陆接口为 rest / api / login ,选择该 web 事务后进入查看详情,使用“筛选”进行条件过滤,获取失败的 trace 。

b:查看错误 trace

在总览页面,经过异常分析,看到 http 响应码和异常类、异常信息,这时候咱们已经清楚问题缘由了。

点击“详情”查看程序的执行状况,能够看到程序循环了三次,均出现错误

在错误详情,查看详情的调用栈,咱们排查到“caused by java.net.ConnectException:拒绝链接(connection refused)

3)解决方案

与运维人员配合重启负责注册模块的服务器后,业务恢复正常。

4)建议方案

在报警处针对重要业务服务进行配置,当响应时间超过阈值或者出现频率超过阈值时,提早报警,挽回损失。

4.1 新功能体验

登陆平台后能够查看报警状态

进入事务详情,鼠标悬停查看该时间段内发生的最近最严重的报警详情

点击红点跳转报警记录查看该事务在该时间段内的全部详情

4.2 如何配置报警

a:从 Ai 页面点击报警

进入报警页面,再选择报警规则,建立报警规则名称、选择类型、自定义规则的可用与不可用时间(好比节假日不可用等)

b:选择报警对象

目前系统支持按照具体 web 事务、按照不一样集群、按照高频 web 事务入口( cpm >10)来进行选择,咱们选择按照具体的 web 事务为报警对象。

c:选择严重条件

根据咱们的业务述求,只要过去10分钟内该事务的平均响应时间大于2秒,并且至少有5分钟的平均响应时间大于2s, 则触发严重报警。

d:选择警告条件

根据咱们的业务述求,只要过去10分钟内该事务的平均响应时间大于1秒,并且至少有5分钟的平均响应时间大于1s, 则触发严重报警。

此时咱们报警规则已配置好,当事务触发报警时,即可在 Ai 平台直接查看是否有报警、是否严重。若是您想及时感知报警,可进行进一步的配置。

4.3 如何接收报警

a:建立接收人

b:选择接收方式

目前 Ai 默认邮件与 webhook 报警方式,但经过与 Cloud Alert (智能告警平台,简称 CA 平台)的打通,支持短信、微信、钉钉等通知方式,更详细的报警分发与报警压缩可查看(经过免费版,中小运维团队够够的)https://www.aiops.com/CAintro...

c:将接收人和报警规则关联

选择报警规则和触发行为便可

经常使用咱们 Ai 平台看报警的小伙伴必定有点奇怪,为何我没有在 Ai 平台中看到报警状态的相关信息呢?

没错,Ai 与报警深度关联功能是咱们新开发的功能,我也提早体验了一把,感受棒棒哒!该功能于12月中旬上线,小伙伴们敬请期待吧~

若您还不是 OneAPM 用户,请点击 https://user.oneapm.com/pages/v2/signup 当即注册免费试用,即刻感觉性能优化吧!

在使用的过程当中,如您有任何疑问和建议,欢迎随时联系咱们,咱们将竭诚为您服务:

qq:321095806

社区:http://club.oneapm.com

相关文章
相关标签/搜索