本文共 1852 字,大约阅读时间需要 6 分钟。
线上线下环境隔离问题,常导致输入难以复现,定位bug效率低下,程序员们常陷入时间流逝的无底深渊。有没有一个简单快捷的解决方案呢?答案是有。
一个程序员的故事:周末12点,闹钟响起程序员小A勉强从睡梦中爬起来。手机通知栏显示无未接电话,拦截信箱也无警告短信,昨晚的发布顺利无误。小A松了口气,戴上BeatsSolo Pro耳机,阳光洒在头发上,美好地想着自己未来的发展。然而,手机突然响起消息提示音,寒意瞬间袭来。测试同学小C发来消息:"昨晚上线的代码好像有点问题,来公司看下?我在公司等你。"小A翻看群聊,发现老板的头像在群设置里赫然一闪而过。怀着各种复杂的心情,小A穿上20元的人字拖,前往西二旗公司。
抵达公司后,对话如期而至:"这段代码测试过,在我电脑上没问题啊"、"你重启下试试"、"是不是代码没上线"、"是不是谁把我代码冲掉了"、"你们测试数据是不是有问题呀"……一个下午、一个晚上、一个周末、小A的青春、甚至整个职业生涯,似乎都在这几个问题的回应中流逝。
这个小故事仅仅想说明一个现象:程序员的很多时间往往被线上bug修复占据。由于线上线下环境不一致、输入输出不一致等原因,许多bug定位效率低下,耗时巨长,导致程序员在面对线上bug时常常头疼不已,不由自主地想要甩锅给外在因素,确定问题出在自己身上后才开始排查。那么线上问题排查到底难在哪儿?让我们深入分析一下。
线上问题排查的基本步骤通常包括以下几个环节:
然而,由于线上线下环境隔离的问题,线上的输入很多时候难以在日常环境中构造,大多数时候我们都在步骤2、3、4中循环,时间在循环中慢慢流逝。这确实是一种令人头疼的现状。那么是否有一款产品可以让用户方便快捷地实现这个目标呢?答案是阿里云的应用实时监控服务(ARMS)。
ARMS是一款应用性能管理(APM)产品,包含应用监控、Prometheus监控和前端监控三大子产品,涵盖分布式应用、容器环境、浏览器、小程序、APP等领域的性能管理,能够实现全栈式性能监控和端到端全链路追踪诊断。ARMS最新推出了Arthas诊断功能,其第一个版本主要包含四个能力:
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/