Arthas - Java 线上问题定位处理利器

前言

在使用 Arthas 之前,当遇到 Java 线上问题时,如 CPU 飙升、负载突高、内存溢出等问题,你需要查命令,查网络,然后 jps、jstack、jmap、jhat、jstat、hprof 等一通操作。最终焦头烂额,还不一定能查出问题所在。而现在,大多数的常见问题你都可以使用 Arthas 轻松定位,迅速解决,及时止损,准时下班。

1、Arthas 介绍

Arthas 是 Alibaba 在 2018 年 9 月开源的 Java 诊断工具。支持 JDK6+, 采用命令行交互模式,提供 Tab 自动补全,可以方便的定位和诊断线上程序运行问题。已经收获 Star 30000+。
Arthas 官方文档十分详细,本文也参考了官方文档内容,同时在开源在的 Github 的项目里的 Issues 里不仅有问题反馈,更有大量的使用案例,也可以进行学习参考。
开源地址:https://github.com/alibaba/arthas
官方文档:https://alibaba.github.io/arthas

2、Arthas 使用场景

得益于 Arthas 强大且丰富的功能,让 Arthas 能做的事情超乎想象。下面仅仅列举几项常见的使用情况,更多的使用场景可以在熟悉了 Arthas 之后自行探索。

  1. 是否有一个全局视角来查看系统的运行状况?
  2. 为什么 CPU 又升高了,到底是哪里占用了 CPU ?
  3. 运行的多线程有死锁吗?有阻塞吗?
  4. 程序运行耗时很长,是哪里耗时比较长呢?如何监测呢?
  5. 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
  6. 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
  7. 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
  8. 有什么办法可以监控到 JVM 的实时运行状态?

3、Arthas的实现原理

Agent

Arthas通过Java Agent技术实现Java应用程序的动态监控和诊断。Java Agent是一种Java虚拟机的附加程序,它可以在Java虚拟机启动时,通过启动参数或者Manifest文件进行加载。Arthas将Java Agent作为中间件来与Java应用程序进行交互,可以在运行时动态地注入自己的代码,来实现对Java应用程序的监控和诊断。

Instrument

Arthas使用Instrumentation API来实现Java应用程序的动态修改和增强。Instrumentation API是Java SE 5引入的一组API,它允许开发人员在运行时修改和增强Java类的字节码,从而可以实现对Java应用程序的动态调试和监控。通过使用Instrumentation API,Arthas可以在Java应用程序运行时动态地修改和增强Java类的字节码,从而实现对Java应用程序的监控和诊断。

具体而言,Arthas通过在Java虚拟机启动时加载自己的Java Agent,并使用Instrumentation API来动态地修改和增强Java类的字节码,从而实现对Java应用程序的监控和诊断。例如,Arthas可以使用Instrumentation API来实现Java类的热替换、方法的拦截和调用、代码的注入和修改等功能。通过这些功能,Arthas可以快速诊断和排查Java应用程序中的问题,提高Java应用程序的性能和可靠性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值