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

标签: 利用 snapshot 功能 | 发表时间:2019-11-26 11:11 | 作者:
出处:http://blog.oneapm.com/

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

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

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


 trace & snapshot 功能介绍


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

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

JVM

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

● 数据库

常见的比如数据库负载繁忙、数据库服务器超负载、单一 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 的“设置-慢事务”处进行设置。 

图1.png

图2.png

● 错误 trace

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

图3.png

● Sql trace

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

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

● snapshot

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

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

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

图6.png


用户案例分析

 

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

1)问题现象:用户反馈无法退出登录


2)问题调查和分析

a:登录平台查看登出的接口情况

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

图7.png

b:查看错误 trace

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

图8.png

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

图9.png

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



3)解决方案

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

4)建议方案

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

4.1 新功能体验

登录平台后可以查看报警状态

图13.png

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

图14.png

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

图15.png

4.2 如何配置报警

a:从 Ai 页面点击报警

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

图16.png

b:选择报警对象

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

图17.png

c:选择严重条件

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

图18.png

d:选择警告条件

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

图19.png

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

4.3 如何接收报警

a:创建接收人

图20.png

b:选择接收方式

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

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

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

图21.png

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


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


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


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


qq:321095806

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


相关 [利用 snapshot 功能] 推荐:

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

- - OneAPM 博客
我们常常会遇到这样的困惑,收到用户或者客服的反馈,平台使用有问题,但是测试人员搭建环境后又没办法复现故障,最后导致问题没法解决,眼睁睁地看着用户流失. 这是因为线上生产环境非常复杂、很多时候是偶发性 bug ,但却很难捕捉. 特别是随着微服务盛行,系统复杂度增加,线上故障的快速定位和及时分析解决面临着巨大挑战,以前只能靠人来解决.

Opera 11.10 snapshot 2076 发布

- Dolphin - cnBeta.COM
Opera 11.10 snapshot 2076 发布,本版将Presto 引擎升级至 2.8.130,并修复了一些快速拨号及Windows 安装包问题. 但这是一个开发版,不推荐普通用户使用,仅供测试. 此版本存在着很多已知问题,可能会造成崩溃或者数据丢失,甚至无法正常使用. 请勿覆盖之前 的版本,并在备份数据后安装使用.

Data Guard - Snapshot Standby Database配置

- - 数据库 - ITeye博客
一般情况下,物理standby数据库处于mount状态接收和应用主库的REDO日志,物理standby数据库不能对外提供访问. 如果需要只读访问,那么可以临时以read-only的方式open物理备库,或者配置ACTIVE DATA GUARD,那么物理standby数据库可以进行只读(read-only)访问(比如报表业务查询),但是物理standby数据库不能进行读写操作(read-write).

Redis性能调优:保存SNAPSHOT对性能的影响

- - CSDN博客系统运维推荐文章
前一段时间,开发环境反馈,Redis服务器访问非常慢,每个请求要数秒时间,重启之后2~3天又会这样. 我查看了一下Linux的性能,没有什么问题. 发现访问Redis确实很慢,执行info要几秒时间. 里面有个参数已连接的客户端几万个,通过. 查看到很多client的age都很大,一直没有释放. 于是怀疑是不是和这个有关,因为版本是2.8.6,无法通过client一次性kill掉所有的连接,只能写一个程序,一个一个地kill掉(.

利用 Android 的 OTG 功能控制单反相机

- Alex - 爱范儿 · Beats of Bits
iOS 平台已经有很多应用程序可以远程控制数码单反相机,但是在 Android 平台上能更方便:只需要一条 USB 线,就能直接用手机屏幕代替相机的取景器进行操作. 在 XDA 论坛上的一名开发者 Chainfire 公布了一段视频,它利用三星 Galaxy S II 的 USB OTG(On-The-Go)功能,让佳能数码单反相机的实时取景框图像以每秒 15 帧的速率显示在手机屏幕上.

[Oracle] 利用自治事务实现审计功能

- - CSDN博客数据库推荐文章
在一个事务(外层事务)中可以定义一个或几个自治事务. 自治事务可以独立commit,不对外层事务产生影响,同样外层事务的 rollback 也对自治事务没有影响. 假设现在有这样一个需求,不能对某个表进行某些操作(如更新),一旦有这类操作,就强制整个回滚,并且在审计日志中记录该次违规操作. 现在的问题是当事务回滚之后,日志中的记录也会跟着被回滚,这时就可以利用自治事务来防止这个问题.

利用Windows 7自建功能建立虚拟无线路由器

- Oswin - iGFW
看到小众软件的这篇文章《Virtual Router – 用无线网卡虚拟出 WiFi 热点》, 刚好GF的手机要上网,就下载了文中的几个软件,感觉都不好用. Virtual Router可以修改SSID名字了,不过在我电脑上死活启动不了. 看到下面的评论说和Windows 7自带的命令一样,于是翻了翻Google,写下本教程.

Wi-Fi APize:利用无线网卡实现无线路由功能

- Natbots - 软件志
一、Wi-Fi APize简介: Wi-Fi APize原理是利用win7或server2008系统自带的netsh程序中的wlan命令,实现wi-fi ap的建立,所以该程序只能在win7或server2008系统上放能正常使用. 通过本程序,只要你的电脑拥有一个无线网卡,您就可以建立wpa2加密的无线网络,共享您的internet连接,将您的电脑变成一个无线路由器,实现wi-fi设备的联网.

Chrome 将利用 Google Suggestion 提供更智能的拼写检查功能

- Nanqi - 谷奥——探寻谷歌的奥秘
Chromium的代码透露,Chrome将拥有一套更智能的拼写检查功能. 现在Chrome的拼写检查工具很不智能(如上图,它居然不会联想出Chrome这个正确的词汇),因为它无法根据上下文关系来联想. 但是Google可有个非常聪明的拼写检查系统啊,那就是Google的搜索引擎,上面那句话放到Google,你就知道它有多聪明了:.

5个国内外利用签到功能的LBS互动案例

- - 互联网的那点事
随着社会化媒体及移动互联网的快速发展,LBS(Location Based Service)这一概念越来越深入且广泛地影响到营销传播形式,被广大品牌广告主及代理公司所热捧. 本文分享五个LBS营销的案例,都很好的将品牌传播诉求与地点移动信息相结合,通过创意活动为消费者创造新颖的线上线下互动体验,使营销方案更具想象力.