线上问题分析诊断神器 Arthas(阿尔萨斯)

Posted 思想累积

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线上问题分析诊断神器 Arthas(阿尔萨斯)相关的知识,希望对你有一定的参考价值。

1、Arathas 介绍

官方文档:https://arthas.aliyun.com/doc/

GitHub 地址:https://github.com/alibaba/arthas

Arthas 是一款开源在线 java 诊断工具,采用命令行交互模式,支持 web 端在线诊断。Arthas 可以进行方法粒度(包括 private 方法)的耗时检测,入参,返回值查看,变量设置等。可以部分的代替线上 debug 功能,方便我们进行问题的定位和诊断

让我们来看看官网是怎么介绍的:

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

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

大声说出我们的感受:牛逼!!!用过的人都说好~~~

2、Arthas 快速开始

2.1 Arthas 下载

下载及安装方式请看官方文档:

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

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

Linux 环境下下载 arthas-boot.jar

wget https://alibaba.github.io/arthas/arthas-boot.jar

2.2 运行

下载下来是个 jar 包,我们可以直接运行

java -jar arthas-boot.jar

运行 jar 包后,控制台会显示所有的 java 进程,我们可以选择一个要诊断的进程

选择进程后,Arthas 会附到目标进程上,并输入日志。

3、Arthas 使用

先编写一个简单的测试项目运行起来,用 Arthas 进行问题的定位和解决

附上可运行代码 GitHub 地址:https://github.com/sunqingda/project/tree/arthas-test-project

项目打个 jar 包放到服务器上在后台运行

nohup java -jar arthas-test-project-1.0.0-SNAPSHOT.jar > server.log &

运行后可以正常访问:http://82.156.227.150:9000/query?id=2

3.1 Arthas 常用命令

下载并安装后,我们就可以开始我们的使用了。首先,让我们先看一下它的命令

看着非常的多,我们先来熟悉一下常用的命令

dashboard 全局监控

dashboard 命令用来显示当前系统的实时数据面板,概览程序的线程、内存、运行环境、GC 等

dashboard

thread 线程信息

thread 命令用来查看 JVM 的所有线程的堆栈信息

thread

thread -n 线程个数 命令可以打印最忙的指定个数线程的堆栈信息

thread -n 3

thread ID 命令用来查看指定 ID 线程的堆栈信息

thread 35

jad 反编译

可以使用 jad 类路径 命令反编译 class 文件,可以使用 tab 自动补全路径

加上 --source-only 可以只显示源码

jad com.sqd.demo.service.TestServiceImpl --source-only

或者 jad 类路径 方法名 只编译某个方法

jad com.sqd.demo.service.TestServiceImpl queryEntityById

sm 查看方法

使用 sm 类名 查看类的方法信息

sm com.sqd.demo.service.TestServiceImpl

monitor 监控

使用 monitor 类名 方法名 --cycle 10 间隔10秒监控统计一次方法执行情况

monitor com.sqd.demo.controller.TestController queryEntityById  -n 10  --cycle 10 

watch 观察方法信息

使用 watch 类名 方法名 '参数类型' 监听方法执行入参和出参详细信息

这个很实用,可以直接查看线上传递参数问题,进行方法排查

watch com.sqd.demo.controller.TestController queryEntityById 'params,returnObj,throwExp'  -n 5  -x 3

使用 stack 类名 方法名 观察方法的调用信息

stack com.sqd.demo.service.TestServiceImpl queryEntityById  -n 5 

基本的使用这些命令差不多了,其它更多的可以继续看官方文档学习 https://arthas.aliyun.com/doc/advanced-use.html

以上是关于线上问题分析诊断神器 Arthas(阿尔萨斯)的主要内容,如果未能解决你的问题,请参考以下文章

Arthas--Java在线分析诊断工具(阿尔萨斯)

java诊断神器 arthas(阿尔萨斯)

Arthas(阿尔萨斯)-java诊断工具-----来源于网络

一文带你快速了解 Java 线上问题快速诊断神器 Arthas

一文带你快速了解 Java 线上问题快速诊断神器 Arthas

java生产环境调试问题排查神器arthas(阿里中台开源的)