arthas使用

文章目录

  • Arthas
    • Arthas(阿尔萨斯)能为你做什么?
    • 安装
      • 1.linux中使用
      • 2.docker中使用
    • 命令列表
      • jvm 相关
      • class/classloader 相关
      • monitor/watch/trace
      • profiler/火焰图

Arthas

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

Arthas(阿尔萨斯)能为你做什么?

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

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

安装

1.linux中使用

# 下载
[root@VM-4-8-centos www]# curl -O https://arthas.aliyun.com/arthas-boot.jar
# 启动
[root@VM-4-8-centos www]# java -jar arthas-boot.jar 

2.docker中使用

遇到的错误

# 在rancher中,找到容器,执行命令行,直接进到容器内部
/ # cd /opt/arthas/
/opt/arthas # ls
arthas-agent.jar   arthas-client.jar  arthas-spy.jar     as-service.bat     as.sh              install-local.sh   logback.xml
arthas-boot.jar    arthas-core.jar    arthas.properties  as.bat             async-profiler     lib                math-game.jar
/opt/arthas # java -jar arthas-boot.jar
[INFO] arthas-boot version: 3.5.5
[INFO] Found existing java process, please choose one and input the serial number of the process, eg : 1. Then hit ENTER.
* [1]: 1 /app.jar
1
[INFO] arthas home: /opt/arthas
[INFO] Try to attach process 1
[ERROR] Start arthas failed, exception stack trace:
com.sun.tools.attach.AttachNotSupportedException: Unable to get pid of LinuxThreads manager thread
        at sun.tools.attach.LinuxVirtualMachine.(LinuxVirtualMachine.java:86)
        at sun.tools.attach.LinuxAttachProvider.attachVirtualMachine(LinuxAttachProvider.java:78)
        at com.sun.tools.attach.VirtualMachine.attach(VirtualMachine.java:250)
        at com.taobao.arthas.core.Arthas.attachAgent(Arthas.java:102)
        at com.taobao.arthas.core.Arthas.(Arthas.java:27)
        at com.taobao.arthas.core.Arthas.main(Arthas.java:151)
[ERROR] attach fail, targetPid: 1
/opt/arthas #

解决方案:

dockfile文件

# 使用jdk完整镜像,否则没有jps命令,arthas启动不了
FROM openjdk:8-jdk-alpine

# 将arthas包打进镜像里
COPY --from=hengyunabc/arthas:latest /opt/arthas /opt/arthas

# 这个要加,否则启动arthas,会遇到如上错误,选定pid为1时会报错
RUN apk --update --no-cache add tini
ENTRYPOINT ["tini"]

命令行启动

[root@server ~]# docker ps -a
CONTAINER ID   IMAGE                                   COMMAND                  CREATED          STATUS                      PORTS  
fbef3a25a005   order-service:dev1.0.0                  "/.r/r tini sh -c 'j…"   28 seconds ago   Up 26 seconds                   
[root@server ~]# docker exec -it fbef3a25a005 /bin/sh
/ # cd /opt/arthas/
/opt/arthas # ls
arthas-agent.jar   arthas-client.jar  arthas-spy.jar     as-service.bat     as.sh              install-local.sh   logback.xml
arthas-boot.jar    arthas-core.jar    arthas.properties  as.bat             async-profiler     lib                math-game.jar
/opt/arthas # java -jar arthas-boot.jar 
[INFO] arthas-boot version: 3.5.5
[INFO] Found existing java process, please choose one and input the serial number of the process, eg : 1. Then hit ENTER.
* [1]: 11 /app.jar
1
[INFO] arthas home: /opt/arthas
[INFO] Try to attach process 11
[INFO] Attach process 11 success.
[INFO] arthas-client connect 127.0.0.1 3658
  ,---.  ,------. ,--------.,--.  ,--.  ,---.   ,---.                           
 /  O  \ |  .--. ''--.  .--'|  '--'  | /  O  \ '   .-'                          
|  .-.  ||  '--'.'   |  |   |  .--.  ||  .-.  |`.  `-.                          
|  | |  ||  |\  \    |  |   |  |  |  ||  | |  |.-'    |                         
`--' `--'`--' '--'   `--'   `--'  `--'`--' `--'`-----'                          

wiki       https://arthas.aliyun.com/doc                                        
tutorials  https://arthas.aliyun.com/doc/arthas-tutorials.html                  
version    3.5.5                                                                
main_class                                                                      
pid        11                                                                   
time       2023-06-02 10:08:22                                                  

[arthas@11]$ 

输入dashboard测试一下
arthas使用_第1张图片

命令列表

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

参考使用案例:https://github.com/alibaba/arthas/issues

有真实使用案例再补充

jvm 相关

  • dashboard - 当前系统的实时数据面板
  • getstatic - 查看类的静态属性
  • heapdump - dump java heap, 类似 jmap 命令的 heap dump 功能
  • jvm - 查看当前 JVM 的信息
  • logger - 查看和修改 logger
  • mbean - 查看 Mbean 的信息
  • memory - 查看 JVM 的内存信息
  • ognl - 执行 ognl 表达式
  • perfcounter - 查看当前 JVM 的 Perf Counter 信息
  • sysenv - 查看 JVM 的环境变量
  • sysprop - 查看和修改 JVM 的系统属性
  • thread - 查看当前 JVM 的线程堆栈信息
  • vmoption - 查看和修改 JVM 里诊断相关的 option
  • vmtool - 从 jvm 里查询对象,执行 forceGc

class/classloader 相关

  • classloader - 查看 classloader 的继承树,urls,类加载信息,使用 classloader 去 getResource
  • dump - dump 已加载类的 byte code 到特定目录
  • jad - 反编译指定已加载类的源码
  • mc - 内存编译器,内存编译.java文件为.class文件
  • redefine - 加载外部的.class文件,redefine 到 JVM 里
  • retransform - 加载外部的.class文件,retransform 到 JVM 里
  • sc - 查看 JVM 已加载的类信息
  • sm - 查看已加载类的方法信息

monitor/watch/trace

  • monitor - 方法执行监控
  • stack - 输出当前方法被调用的调用路径
  • trace - 方法内部调用路径,并输出方法路径上的每个节点上耗时
  • tt - 方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测
  • watch - 方法执行数据观测

profiler/火焰图

  • profiler - 使用async-profiler对应用采样,生成火焰图
  • jfr - 动态开启关闭 JFR 记录

你可能感兴趣的:(其他,jvm,java,linux,arthas)