博客
关于我
走完线上 BUG 定位最后一公里
阅读量:183 次
发布时间:2019-02-27

本文共 1852 字,大约阅读时间需要 6 分钟。

线上线下环境隔离问题,常导致输入难以复现,定位bug效率低下,程序员们常陷入时间流逝的无底深渊。有没有一个简单快捷的解决方案呢?答案是有。

一个程序员的故事:周末12点,闹钟响起程序员小A勉强从睡梦中爬起来。手机通知栏显示无未接电话,拦截信箱也无警告短信,昨晚的发布顺利无误。小A松了口气,戴上BeatsSolo Pro耳机,阳光洒在头发上,美好地想着自己未来的发展。然而,手机突然响起消息提示音,寒意瞬间袭来。测试同学小C发来消息:"昨晚上线的代码好像有点问题,来公司看下?我在公司等你。"小A翻看群聊,发现老板的头像在群设置里赫然一闪而过。怀着各种复杂的心情,小A穿上20元的人字拖,前往西二旗公司。

抵达公司后,对话如期而至:"这段代码测试过,在我电脑上没问题啊"、"你重启下试试"、"是不是代码没上线"、"是不是谁把我代码冲掉了"、"你们测试数据是不是有问题呀"……一个下午、一个晚上、一个周末、小A的青春、甚至整个职业生涯,似乎都在这几个问题的回应中流逝。

这个小故事仅仅想说明一个现象:程序员的很多时间往往被线上bug修复占据。由于线上线下环境不一致、输入输出不一致等原因,许多bug定位效率低下,耗时巨长,导致程序员在面对线上bug时常常头疼不已,不由自主地想要甩锅给外在因素,确定问题出在自己身上后才开始排查。那么线上问题排查到底难在哪儿?让我们深入分析一下。

线上问题排查的基本步骤通常包括以下几个环节:

  • 找到能复现问题的输入
  • 判断该输入能否在日常环境中构造,无法构造则进入下一步
  • 查看线上环境日志,寻找异常输入相关的异常日志,辅助排查问题
  • 初步推断问题原因,尝试修复并增加日志输出,打包发布,重复步骤3直到定位根因
  • 在日常环境中构造相同输入,单点调试,定位问题
  • 然而,由于线上线下环境隔离的问题,线上的输入很多时候难以在日常环境中构造,大多数时候我们都在步骤2、3、4中循环,时间在循环中慢慢流逝。这确实是一种令人头疼的现状。那么是否有一款产品可以让用户方便快捷地实现这个目标呢?答案是阿里云的应用实时监控服务(ARMS)。

    ARMS是一款应用性能管理(APM)产品,包含应用监控、Prometheus监控和前端监控三大子产品,涵盖分布式应用、容器环境、浏览器、小程序、APP等领域的性能管理,能够实现全栈式性能监控和端到端全链路追踪诊断。ARMS最新推出了Arthas诊断功能,其第一个版本主要包含四个能力:

  • JVM概览:实时查看JVM内存、GC信息、操作系统信息、环境变量、系统变量等信息
  • 线程耗时分析:实时查看线程耗时情况,可查看每个线程实时的方法堆栈
  • 方法执行分析:实时抓取满足指定条件的方法执行明细、入出参数以及异常
  • 性能分析:通过火焰图形式展示系统性能瓶颈
  • Arthas功能使用起来也非常简单,下面我们将通过一个实际案例,详细讲解如何利用ARMS的Arthas诊断能力来定位线上问题。我们将重点分析方法执行不符合预期这一类问题。

    案例背景:product应用的com.alibabacloud.hipstershop.productserviceapi.service.ProductService@confirmInventory接口某次发布后平均响应时间(RT)达到了400ms,发布前平均RT在1ms以下。现在需要定位具体耗时的原因。

    进入ARMS Arthas诊断页面,输入相应的类名和方法名(如com.alibabacloud.xxx.xxx.xxx.ProductService,方法confirmInventory),点击确定后即可查看方法执行的详细信息。通过调整诊断参数(如设置方法耗时大于300ms的过滤条件),我们可以抓取到耗时较长的方法调用记录。进一步分析发现,该方法中存在Thread.sleep()方法的调用,这导致了响应时间的长延迟。查看方法源码后可以清楚地看到逻辑原因。

    通过ARMS的Arthas诊断功能,我们不仅可以快速定位问题,还能深入分析问题根源,极大地方便了线上问题的排查工作。ARMS的Arthas功能无疑是您线上问题诊断的利器,帮助您更快更方便地定位线上故障。

    最后要提的是,ARMS的Arthas诊断功能目前仅适用于部署在K8s集群中的Java应用,后续将支持ECS上的Java应用。对于企业级分布式应用服务的用户来说,ARMS提供了一体化的监控与诊断能力,您可以根据实际情况选择适合的产品体验ARMS的Arthas诊断功能。

    转载地址:http://wqeb.baihongyu.com/

    你可能感兴趣的文章
    NI笔试——大数加法
    查看>>
    NLog 自定义字段 写入 oracle
    查看>>
    NLog类库使用探索——详解配置
    查看>>
    NLP 基于kashgari和BERT实现中文命名实体识别(NER)
    查看>>
    NLP 模型中的偏差和公平性检测
    查看>>
    Vue3.0 性能提升主要是通过哪几方面体现的?
    查看>>
    NLP 项目:维基百科文章爬虫和分类【01】 - 语料库阅读器
    查看>>
    NLP_什么是统计语言模型_条件概率的链式法则_n元统计语言模型_马尔科夫链_数据稀疏(出现了词库中没有的词)_统计语言模型的平滑策略---人工智能工作笔记0035
    查看>>
    NLP三大特征抽取器:CNN、RNN与Transformer全面解析
    查看>>
    NLP学习笔记:使用 Python 进行NLTK
    查看>>
    NLP度量指标BELU真的完美么?
    查看>>
    NLP的不同研究领域和最新发展的概述
    查看>>
    NLP的神经网络训练的新模式
    查看>>
    NLP采用Bert进行简单文本情感分类
    查看>>
    NLP问答系统:使用 Deepset SQUAD 和 SQuAD v2 度量评估
    查看>>
    NLP项目:维基百科文章爬虫和分类【02】 - 语料库转换管道
    查看>>
    NLP:使用 SciKit Learn 的文本矢量化方法
    查看>>
    nmap 使用方法详细介绍
    查看>>
    Nmap扫描教程之Nmap基础知识
    查看>>
    nmap指纹识别要点以及又快又准之方法
    查看>>