学会使用ARTHAS(一)

前言

现在有很多文章都在写ARTHAS,其实笔者也看着文章各种学习。本篇文章,大家可以认为是笔者的“自私贴”,为了逼自己学会ARTHAS,强行进行了博客搬运。

ARTHAS简介

  • 照例,官方释义:

Arthas is a Java Diagnostic tool open sourced by Alibaba. Arthas是一个支持JDK6+,支持Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的Tab自动补全功能的强大的开源Java诊断工具,现在被业界广泛使用。

ARTHAS解决的痛点

  • 线上方法耗时突然增加,不知道哪一步骤导致
  • 全局查看系统运行情况
  • 全局查看JVM运行状态
  • 反编译代码,查看我的代码是否提交

ARTHAS使用(下文的{packageName}是全路径!!!)

  • 下载安装

这里就不再赘述了,大家可以参照https://alibaba.github.io/arthas/。

  • 启动

  • 官方给出了两种启动方式,官方更推荐arthas-boot.jar包启动,看文档多了个-h选项。

# jar包(官方更推荐这个)
java -jar arthas-boot.jar 
# 打印help信息
java -jar arthas-boot.jar -h
# shell脚本
./as.sh
复制代码
  • attach到相应进程
# 启动
$ java -jar arthas-boot.jar

[INFO] arthas-boot version: 3.1.0
[INFO] Found existing java process, please choose one and hit RETURN.
# 选择进程
* [1]: 417 com.test.zacpark.hello.Test
1
[INFO] arthas home: /opt/soft/arthas
[INFO] Try to attach process 417
[INFO] Attach process 417 success.
[INFO] arthas-client connect 127.0.0.1 3658
  ,---.  ,------. ,--------.,--.  ,--.  ,---.   ,---.
 /  O  \ |  .--. ''--.  .--'|  '--'  | /  O  \ '   .-'
|  .-.  ||  '--'.'   |  |   |  .--.  ||  .-.  |`.  `-.
|  | |  ||  |\  \    |  |   |  |  |  ||  | |  |.-'    |
`--' `--'`--' '--'   `--'   `--'  `--'`--' `--'`-----'


wiki: https://alibaba.github.io/arthas
version: 3.1.0
pid: 417
time: 2019-08-09 10:06:15
复制代码
  • 看板,可以看到线程、内存、GC、运行环境、Tomcat信息等等。
$ dashboard
复制代码

  • 线程栈
$ thread {pid}
复制代码
  • 反编译查看.class文件,可以知道.class文件的ClassLoader信息和jar包信息,以及代码(可以看自己提交的代码生效与否)。
$ jad {packageName}.{className}

ClassLoader:
+-sun.misc.Launcher$AppClassLoader@b2929b2
  +-sun.misc.Launcher$ExtClassLoader@3b706ad7

Location:
/opt/service/hello/test-1.0.0.jar

/*
 * Decompiled with CFR 0_132.
 */
package com.test.zacpark.hello.test;

public class Test {
	public static void main(String[] args) {
	...
	}
}
复制代码
  • 查看函数返回值,会打出函数消耗时间,不用远程调试了
$ watch {packageName}.{className} {methodName} returnObj

ts=2019-08-09 12:21:10; [cost=7.078086ms] result=@Boolean[false]
ts=2019-08-09 12:21:11; [cost=6.550872ms] result=@Boolean[false]
复制代码

总结

本文对 Arthas的基础使用,进行了梳理,其实是笔者的“自私学习笔记贴”。

参考文献

猜你喜欢

转载自juejin.im/post/5d4cf5aa6fb9a06b0e547fa7