线上调试Arthas的学习使用

什么是Arthas(阿尔萨斯)

Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。

Arthas(阿尔萨斯)的用途

  • 查找类加载jar包,类相关的Exception
  • 反编译线上jar包,查找与本地代码不一致的地方
  • 线上debug
  • 全局视角查看系统的运行状况
  • 监控JVM的实时运行状态
  • 快速定位应用的热点,生成火焰图
  • 直接从JVM内查找某个类的实例

安装Arthas

解压后,在文件夹里有arthas-boot.jar,直接用java -jar的方式启动:


1
java -jar arthas-boot.jar

打印帮助信息:


1
java -jar arthas-boot.jar -h

Arthas基础入门

启动 math-game 进行测试

math-game是一个简单的程序,每隔一秒生成一个随机数,再执行质因数分解,并打印出分解结果。

math-game源代码:查看

1
java -jar math-game.jar

启动 arthas

1
java -jar arthas-boot.jar
  • 执行该程序的用户需要和目标进程具有相同的权限。比如以admin用户来执行:sudo su admin && java -jar arthas-boot.jar 或 sudo -u admin -EH java -jar arthas-boot.jar。
  • 如果 attach 不上目标进程,可以查看~/logs/arthas/ 目录下的日志。
  • 如果下载速度比较慢,可以使用 aliyun 的镜像:java -jar arthas-boot.jar —repo-mirror aliyun —use-http
  • java -jar arthas-boot.jar -h 打印更多参数信息。

查看 dashboard

输入dashboard,按回车/enter,会展示当前进程的信息,按ctrl+c可以中断执行。

通过 jad 来反编译 Main Class

1
jad demo.MathGame

watch

通过watch命令来查看demo.MathGame#primeFactors函数的返回值:

退出 arthas

如果只是退出当前的连接,可以用quit或者exit命令。Attach 到目标进程上的 arthas 还会继续运行,端口会保持开放,下次连接时可以直接连接上。

如果想完全退出 arthas,可以执行stop命令。