⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 jitwxs.cn/a64edcb1.html 「Jitwxs」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注**微信公众号:【芋道源码】**有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言将得到认真回复。甚至不知道如何读源码也可以请教噢
  4. 新的源码解析文章实时收到通知。每周更新一篇左右
  5. 认真的源码交流微信群。

早就听闻阿里开源的 Arthas 在做 Java 应用诊断上十分牛逼,身边也有很多同事在使用,因此决定开一个坑,自己从零学习下这个工具的使用,本系列使用的版本是当前最新版 3.4.5。

由于 Arthas 经过这么长时间的发展,本身文档、在线教程已经十分健全了,同时还有第三方的 IDEA 插件、许多教学视频去帮助我们入门使用,因此这个系列的文章定位是个人笔记,而并非教程,希望不要误人子弟。

概述

https://arthas.aliyun.com

当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:

  • 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
  • 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
  • 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
  • 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
  • 是否有一个全局视角来查看系统的运行状况?
  • 有什么办法可以监控到JVM的实时运行状态?
  • 怎么快速定位应用的热点,生成火焰图?

使用 Arthas 需要 JDK 版本在 1.6 以上。

图片

快速安装

https://arthas.aliyun.com/doc/install-detail.html

Arthas 本身也是个 Java 进程,得益于 Java 跨平台特性,所以我就直接在 Windows 上安装了。

(1)下载 Arthas 包

curl -O https://arthas.aliyun.com/arthas-boot.jar

(2)运行 Arthas

java -jar arthas-boot.jar

需要注意的是运行 Arthas 前至少保证系统正在运行一个 Java 进程,否则无法启动,并会报错:Can not find java process. Try to pass in command line.Please select an available pid。解决办法就是跑一个 Java 应用即可。

如果需要卸载 Arthas 的话:

在 Linux/Unix/Mac 平台,删除下面文件:

rm -rf ~/.arthas/
rm -rf ~/logs/arthas

Windows平台直接删除user home下面的.arthas和logs/arthas目录

快速入门

4.1 attach 进程

这里我们使用 Arthas 官方提供的 demo 包,这样我们就不需要自己编写代码了。将 demo 包下载下来并运行。

curl -O https://arthas.aliyun.com/arthas-demo.jar
java -jar arthas-demo.jar

这个 demo 功能是死循环做质因数分解,并记录下无法分解的次数,如下图所示。

图片

我们首先启动 Arthas 并 attach 上该进程。

图片

默认情况下,Arthas只listen 127.0.0.1,所以如果想从远程连接,则可以使用 --target-ip参数指定 listen 的IP

另外如果条件允许的话,在 attach 后也可以使用浏览器登录,访问:http://127.0.0.1:3658 即可。也可以填入 IP,远程连接其他机器的 Arthas。图片

4.2 常用命令

4.2.1 dashboard

https://arthas.aliyun.com/doc/dashboard.html

使用 dastboard 命令可以查看 Java 进程信息(定时刷新),如需退出使用 q 即可。它由如下四个部分组成:

  • 第一部分是显示JVM中运行的所有线程:所在线程组,优先级,线程的状态,CPU的占用率,是否是后台进程等
  • 第二部分显示的JVM内存的使用情况
  • 第三部分显示的是 GC 相关的信息
  • 第四部分是操作系统的一些信息和Java版本号

图片

4.2.2 thread

https://arthas.aliyun.com/doc/thread.html

使用 thread 命令可以查看当前所有的线程信息。图片

并且可以通过追加 PID 的方式,查看具体某个线程的状态。图片

4.2.3 jad

https://arthas.aliyun.com/doc/jad.html

使用 jad 命令可以反编译 class 文件。

图片

4.2.2 watch

https://arthas.aliyun.com/doc/watch.html

watch 命令可以监控方法的入参出参:

图片

退出 Arthas

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

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

文章目录
  1. 1. 概述
  2. 2. 快速安装
  3. 3. 快速入门
    1. 3.1. 4.1 attach 进程
    2. 3.2. 4.2 常用命令
      1. 3.2.1. 4.2.1 dashboard
      2. 3.2.2. 4.2.2 thread
      3. 3.2.3. 4.2.3 jad
      4. 3.2.4. 4.2.2 watch
  4. 4. 退出 Arthas