走完线上 BUG 定位最后一公里

简介: 因为线上线下环境隔离的问题,线上的输入很多时候难以在日常环境中构造,定位 bug 效率低下。是否有简单快捷的办法呢?

一个小故事

周末12点的闹钟在回龙观均价3000的出租屋急促的响起,程序员小A慵懒的拿过手机,滑开手机通知栏,没有未接电话,点开手机的拦截信箱,没有报警短信,昨晚的发布一定很顺利。小A幸福的伸了个懒腰。戴上3000块的BeatsSolo Pro,音乐逐渐响起来,小A缓缓的闭上了眼睛,正午的阳光从窗户漫进来,撒在小A稀疏的头发上。此时的小A正在脑海中勾勒着自己美好的未来。房东说:十年前住在这间屋的小B,现在已经是某度的T10 大佬,五年前住在这儿的小T,现在已经在某条带领200人的团队,想到这儿,小A的嘴角微微上扬,那我也一定不会太差吧~

嘀嘀..耳机里传来两声消息提示音,小A心里咯噔一声,刺骨的寒意弥漫开来,北京三月的阳光突然就不暖了。小A用力的微微睁开双眼,通知栏测试同学小C的头像一闪而过。

xx线上BUG紧急修复群

小C: “@小A 昨晚上线的代码好像有点有问题,来公司看下?我在公司等你。”

点开群设置,老板的头像赫然在列。

怀着愧疚、徘徊、悔恨、无奈、愤怒的心情,小A翻身穿上他在路边买的价值20元的人字拖,坐上了前往西二旗的地铁十号线。

不久,西二旗某办公室传来了亘古不变的对话,“这段代码测试过,在我电脑上没问题啊”、"你重启下试试"、“是不是代码没上线”、“是不是谁把我代码冲掉了”、“你们测试数据是不是有问题呀”……于是一个下午过去了、一个晚上过去了、一个周末过去了、一个程序员的青春过去了、一个程序员本就不长的职业生涯过去了。

 

一个小总结

 

上面这个虚构的小故事只是想说明一个简单的现象,程序员的很多时间被线上bug fix占据。因为线上线下环境不一致、输入输出不一等等原因,很多bug定位起来效率低下,耗时巨长,导致很多时候程序员遇到线上bug总是头疼不已,不由自主的想要甩锅给外在因素,在确定是自己的问题的时候再排查问题。那么线上问题排查到底难在哪儿?首先来看看我们排查线上问题的一个基本步骤,这个步骤一般是排查大多数线上问题的步骤。

步骤1:找到能复现问题的输入;

步骤2:判断该输入能否在日常环境构造, 如果能,调到步骤5。如果不能,继续步骤3;

步骤3:查看线上环境日志,看能否找到异常输入相关的异常日志,辅助排查问题;

步骤4:初步推断问题原因,尝试修复并加上更多日志输出。然后打包、发布。重复步骤3直到定位根因;

步骤5:日常构造相同输入,单点调试,定位问题;

实际的场景中,因为线上线下环境隔离的问题,线上的输入很多时候难以在日常环境中构造,大多数时候我们都在步骤2、3、4中循环,于是时间就在循环中慢慢的流逝了。

 

上面做这么多步骤其实对于查问题而言就是希望可以知道当某段代码执行不符合预期的时候,这段代码的输入是什么,输出是什么,抛出了什么异常,以及代码中每一行的具体执行情况。那么是否有一款产品可以让用户方便快捷的实现这个目标呢?答案是有的。

 

聊一聊ARMS

 

阿里云的应用实时监控服务ARMS是一款应用性能管理(APM)产品,包含应用监控、Prometheus监控和前端监控三大子产品,涵盖分布式应用、容器环境、浏览器、小程序、APP 等领域的性能管理,能帮助用户实现全栈式性能监控和端到端全链路追踪诊断。

 

ARMS最新推出了Arthas诊断功能,其第一个版本主要包含四个能力,分别是JVM概览、线程耗时分析、方法执行分析以及性能分析:

 

  • JVM概览:查看实时的JVM内存、GC信息以及操作系统信息、环境变量、系统变量等信息。
  • 线程耗时分析:查看实时的线程耗时情况,并可查看每个线程实时的方法堆栈。
  • 方法执行分析:实时的抓取满足指定条件的方法执行明细、出入参数以及异常。
  • 性能分析:快捷的通过火焰图的的形式,展示系统性能瓶颈。

ARMS的Arthas功能使用起来也比较简单,详情可参照文档。下面来简单聊一聊如何利用ARMS的Arthas诊断能力来进行线上问题的定位。

聊一聊ARMS Arthas诊断

上一节简单介绍了下ARMS的Arthas诊断具备的能力,那么用这些能力能解决哪些线上问题呢?在这里,我们对线上问题进行了一个归纳总结,将其分为下面四类问题:

  • 方法执行不符合预期:包括方法执行耗时、方法返回值、方法抛出了异常等情况,表现在应用上可能是一些接口或者服务的RT增高,错误率增高,返回值异常等。
  • 进程CPU耗时突增:一般有代码死循环问题、FullGC导 GC线程耗时高、并发使用HashMap等。
  • 性能优化问题:主要用于分析性能瓶颈,辅助性能优化,包括 CPU 耗时、内存分配、锁竞争、itimer 等情况的性能分析。
  • 其他问题:比如初始化环境变量读取错误、内核版本不符合要求、类冲突等问题。

下面就以一个实际的demo来演示如何利用ARMS的Arthas来进行方法执行不符合预期这种问题的诊断,后续的文章会继续介绍如何利用Arthas进行其他类型问题的诊断。

利用ARMS Arthas诊断方法执行不符合预期类问题

问题背景:product 应用的com.alibabacloud.hipstershop.productserviceapi.service.ProductService@confirmInventory 接口某次发布后平均 RT 到达 400,发布以前的平均 RT 在 1ms 以下,如下图所示。现在想定位耗时具体耗在哪儿。

图 1

 

首先,进入ARMS Arthas诊断的页面。当我们进行BUG定位的时候,首先需要知道出问题的类名和方法名,按照图示截图中的红色注释输入相应的类名和方法名。如果你是EDAS用户,可直接选择一个服务或者接口,后台会自动推断相应的实现类和方法。对应到本案例,对应的类是com.alibabacloud.xxx.xxx.xxx.ProductService,方法是confirmInventory。填写完毕后点击确定。

图 2

 

如下图所示,点击确定后可以得到confirmInventory方法执行的纪录,包含执行的入参,返回值异常以及方法执行明细。

图 3

 

但是这次执行的耗时2.89ms,不是我们预期中的一次耗时高调用。此时,可点击右上角修改诊断参数,设定抓取耗时大于300ms的方法调用(除此以外还可以设置更多的过滤条件,包括方法参数满足的条件等等,具体可查看文档。

 

图 4

 

点击确定后,点击右上角刷新图标再次诊断,这次抓取到一次耗时1501ms的方法调用,发现原来是在该方法的执行过程中,执行了Thread.sleep() 方法。

图5

 

到这里,你可能还会好奇,为什么会执行sleep方法呢?这块代码的逻辑是怎样的呢?点击右上角查看方法源码,一目了然的将方法源码与方法执行明细相结合。如下图所示,confirmInventory方法中执行的每一次方法调用最后会以“//-”为前缀展示该方法执行的耗时情况。

图 6

此外,你还可以点击图5 ,列表最右侧的操作列的下钻,快捷的进一步分析confirmInventory调用的子方法的执行情况。这在根因比较深的场景下十分方便好用。

至此,完成了我们这个问题的一个定位演示。

相信ARMS的Arthas诊断功能一定给你留下了深刻的印象,也一定会成为您线上问题诊断的利器,帮助您更快更方便的诊断线上故障。

写在最后

点此快速免费体验ARMS功能。此外,企业级分布式应用服务EDAS K8s作为一款一体化的产品,既具备了应用的托管能力,也集成了ARMS的监控诊断能力,同样可以体验ARMS的Arthas诊断功能,可根据您目前的实际情况选择一款产品来体 ARMS的Arthas诊断能力。

备注:上述功能目前仅对部署在K8s为集群中的Java应用有效,后续会支持部署的ECS上的Java应用。

原文链接

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/513715.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

不带头节点的链表有哪些缺点_14. 删除链表中重复的结点

删除链表中重复的结点 题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5写链表中我…

基于 Flutter 的 Web 渲染引擎「北海」正式开源!

简介: 阿里巴巴历时 3 年自研开发的 Web 渲染引擎北海(英文名:Kraken)正式开源,致力打造易扩展,跨平台,高性能的渲染引擎,并已在优酷、大麦、天猫等业务场景中使用。 作者 | 染陌 来…

“倚天”一出,谁与争锋?阿里发布首颗云芯片倚天 710,死磕自研芯

作者 | 贾凯强、伍杏玲 出品 | CSDN云计算(ID:CSDNcloud)10 月 19 日,2021 年云栖大会正式拉开帷幕。达摩院院长、阿里云智能事业部总裁张建锋表示,如今一个以云为核心的新型计算体系结构正在形成,该…

三菱m70刀杯上下m代码_加工中心常用G代码和M代码大全,收藏好了

我们在使用数控加工中心的过程中,最常见的数控代码有两种,一种是G代码,一种是M代码。本文整理了常见的G代码和M代码的含义,不同厂商不同的数控系统可能稍有出入,在实际中以说明书为准。G代码:准备功能&…

DataWorks搬站方案:Azkaban作业迁移至DataWorks

简介: DataWorks迁移助手提供任务搬站功能,支持将开源调度引擎Oozie、Azkaban、Airflow的任务快速迁移至DataWorks。本文主要介绍如何将开源Azkaban工作流调度引擎中的作业迁移至DataWorks上。 DataWorks迁移助手提供任务搬站功能,支持将开源…

DataWorks搬站方案:Airflow作业迁移至DataWorks

简介: DataWorks提供任务搬站功能,支持将开源调度引擎Oozie、Azkaban、Airflow的任务快速迁移至DataWorks。本文主要介绍如何将开源Airflow工作流调度引擎中的作业迁移至DataWorks上 DataWorks提供任务搬站功能,支持将开源调度引擎Oozie、Az…

mysql的每隔1分钟定时_深入研究MySQL(四)、备份与恢复

一、前言知道备份的重要性吗?没经历过的可能永远不知道,我们在重装系统、手机升级等时候,备份一下必要数据总是有好处的,指不定哪个神操作导致磁盘数据丢失,前些日子删库跑路被判刑的那位老哥,如果公司有备…

重磅发布 阿里云数据中台全新产品DataTrust聚焦企业数据安全保障

简介: DataTrust(隐私增强计算产品)是基于阿里云底层多项基础安全能力,经过阿里云数据中台丰富的客户业务实践,构建的一款为企业数据安全流通的产品。 随着包括零售、制造、金融等多行业数字化转型加速推进&#xff0…

完全无人驾驶量产车Apollo Moon威马版首秀 成本降一半、能力翻10倍

2021年10 月19日,百度Apollo联合威马正式发布两款新车,新车型均基于威马W6打造。一款是配置激光雷达的新一代无人车Apollo Moon量产车型(Apollo Moon威马版);另一款是搭载百度ANP领航辅助驾驶系统与AVP自主泊车系统的量…

二阶振荡环节的谐振频率_自动控制系统时域分析十三:对数频率特性

一:对数频率特性曲线(波德图-Bode图)Bode图由对数幅频特性和对数相频特性两条曲线组成。⒈波德图坐标(横坐标是频率,纵坐标是幅值和相角)的分度:1)横坐标分度(称为频率轴):它是以频率w的对数值logw进行线性分度的。但为了便于观察…

深入分析 Flutter 渲染性能

简介: Flutter 有很多优点,特别是对于开发者来说,跨平台多端支持,丰富的 UI 组件库和交互效果,声明式 UI,React 的更新方式,Hot-reload 提高开发效率等等。虽然它在渲染性能上有不少缺陷&#x…

张勇云栖大会谈科技担当与责任:做开放共享人人受益的好科技

10月19日,2021云栖大会在杭州开幕,阿里巴巴集团董事会主席兼首席执行官张勇在主论坛致辞中表示,从万物互联到万物生长,云栖大会经过12年的轮回,正站在一个新的起点上。阿里希望在基础研究方面有更多、更扎实的社会担当…

技术干货 | 源码解析 Github 上 14.1k Star 的 RocketMQ

简介: 站在发送方视角,通过源码,来分析在事务消息发送中 RocketMQ 是如何工作的。 前言 Apache RocketMQ 作为广为人知的开源消息中间件,诞生于阿里巴巴,于 2016 年捐赠给了 Apache。从 RocketMQ 4.0 到如今最新的 v4…

编译后没有taget文件夹_matconvnet安装、编译、配置

一、安装(可见大神windows下编译Matconvnet的方法(CPU和GPU))1.(本人)安装matlab2015b、Visual Studio 20152.官网Home - MatConvNet下载matconvnet工具包,我的名字是matconvnet-1.0-beta25,然后解压文件到…

面对大规模 K8s 集群,如何先于用户发现问题?

简介: 怎样才能在复杂的大规模场景中,做到真正先于用户发现问题呢?下面我会带来我们在管理大规模 ASI 集群过程中对于快速发现问题的一些经验和实践,希望能对大家有所启发。 作者 | 彭南光(光南) 来源 | 阿…

第7届UBBF在迪拜举办 加强网络设施建设将加速产业发展成为共识

今天,由联合国宽带委员会和华为共同举办的第7届全球超宽带高峰论坛(UBBF 2021)在迪拜开幕。作为固网领域全球最大的峰会,今年的UBBF以“联接,新增长”为主题,全球领先的运营商、设备商共同围绕“网络基础设…

使用 rocketmq-spring-boot-starter 来配置、发送和消费 RocketMQ 消息

简介: 本文将 rocktmq-spring-boot 的设计实现做一个简单的介绍,读者可以通过本文了解将 RocketMQ Client 端集成为 spring-boot-starter 框架的开发细节,然后通过一个简单的示例来一步一步的讲解如何使用这个 spring-boot-starter 工具包来配…

回归的误差服从正态分布吗_盘点10大回归类型:总有一款深得你心

全文共2507字,预计学习时长5分钟除了统计模型和其他的一些算法,回归是机器学习成功运行的重要构成要素。回归的核心是寻找变量之间的关系,而机器学习需要根据这种关系来预测结果。显然,任何称职的机器学习工程师都应重视回归&…

What‘s new in dubbo-go v1.5.6

简介: dubbogo 社区近期发布了 dubbogo v1.5.6。该版本和 dubbo 2.7.8 对齐,提供了命令行工具,并提供了多种加载配置的方式。 作者 | 铁城 dubbo-go 社区 committer 来源 | 阿里巴巴云原生公众号 dubbogo 社区近期发布了 dubbogo v1.5.6。该…

华为彭松:基于C.A.F模型构建联接竞争力,创造新增长

10月19日,第七届全球超宽带高峰论坛(Ultra-Broadband Forum 2021)在迪拜开幕。期间,华为运营商BG Marketing与解决方案销售部总裁彭松发表了题为“联接,新增长”的主题演讲,定义并深入探讨了C.A.F&#xff…