Arthas-Java 线上问题排查利器

506 阅读2分钟

前言

  • 工欲善其事,必先利其器。而手握利器,工作便可游刃有余。
  • 线上问题大家都不希望遇到,但是它又总是无法避免的。而由于线上环境有诸多限制,比如传统的添加日志代码重新发布程序一般是不允许的。此时,最痛苦的莫过于因为缺少关键的日志信息导致问题排查受阻。
  • 下面分享一个阿里开源的 Java 诊断工具——Arthas。相信认识它之后,大家会有相见恨晚的感觉。

Arthas 的故事

  • 首先,附上 Arthas 的GitHub 地址:github.com/alibaba/art…
  • 博主初次遇到 Arthas,应该是在去年的春天,而博主在夏天写了一份回忆录:传送门
  • 最近,有朋友说靓仔就应该来掘金写博主,所以博主来了。恰巧,今天又用到了 Arthas,所以就有了这篇博客。
  • 博主近期遇到一个问题,有一个线上系统突然间无法发送微信模板消息。曾一度怀疑是因为有人修改了微信公众号的配置信息,但经过多次校验后却定位到了一个函数。为了验证猜想,引入了 arthas 来观察这个函数的调用情况:入参、调用者、返回结果。

借助 Arthas 排查线上问题

  • 在官网下载程序包: arthas-boot.jar
  • 上传到生产服务器,启动 arthas:
    • java -jar arthas-boot.jar 123178
    • 这里的 123178 是指进程 PID
  • 不知道如何使用 arthas 也不需要担心,输入命令:help
    • 即可看到 arthas 的命令说明列表
    • 由于当前的需求是观察某个函数(方法)的调用情况,所以应该选择 watch 命令
  • 不知道如何使用 watch 也不需要担心,输入命令:watch --help查看帮助文档
    • 从帮助文档中,可以看到很多使用示例:
    • 当前的需求可以参考画圈的部分示例
  • 观察获取微信公众平台 token 的函数调用情况:
    • 果然,和猜想的一样。这个获取 token 的确实有问题。而由于这里的 token 获取失败,影响到所有需要 token 作为身份校验的微信公众号接口的调用。

小结

  • 在生产环境,很多平常非常好用的可视化工具由于诸多限制没有办法使用,此时能帮助我们的反而是平常被忽视的小巧玲珑的命令行工具,比如 arthas ,希望小伙伴们也喜欢它。