arthas使用

news/2024/12/2 8:38:44/

文章目录

  • 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 threadat sun.tools.attach.LinuxVirtualMachine.<init>(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.<init>(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测试一下
在这里插入图片描述

命令列表

官方文档: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 记录

http://www.ppmy.cn/news/170171.html

相关文章

Seata做分布式事务时,报错后事务不回滚的问题

1、Seata做分布式事务时&#xff0c;报错后事务不回滚的问题&#xff1f; 具体问题举例&#xff1a;有两个服务A和服务B&#xff0c;服务A通过openfiegn调用服务B的接口&#xff0c;服务A和服务B都能正常注册到seat服务。接口正常添加GlobalTransactional注解。方法报错是单个服…

工业RFID解决方案怎么选?主要看这几项内容

如何选择适合您需求的RFID解决方案&#xff1f;通过深入了解需求、环境适应性、成本效益和供应商选择&#xff0c;您将能够更加全面地评估和选择适合自身需求的RFID解决方案。同时&#xff0c;不断与供应商和专业人员进行沟通和合作&#xff0c;可以获取更多关于特定解决方案的…

数据结构和算法的基本概念

数据结构概念 1.数据&#xff1a;所有能输入计算机且能被计算机处理的符号总称 2.数据元素&#xff1a;是数据的基本单位&#xff0c;表示数据集合中的一个个体。 3 .数据项&#xff1a;数据元素中有独立含义的最小单位。 数据结构&#xff1a;相互之间存在一定关系的数据元素的…

你现在还在自己洗碗?教你制作单片机的洗碗机控制器

设计简介&#xff1a; 本设计是基于单片机的洗碗机控制器&#xff0c;主要实现以下功能&#xff1a; LCD1602显示温度、温度最大值以及状态按键设置温度最大值洗碗过程&#xff1a;进水-->加热-->排水-->冲洗-->烘干-->结束在洗碗过程中可以通过按键暂停、开始…

操作系统(3.3)--线程的实现方式

进程调度的任务、机制和方式 1.进程的调度任务 进程调度的任务主要有三&#xff1a; (1)保存处理机的现场信息。在进程调度进行调度时&#xff0c;首先需要保存当前进程的处理机的现场信息&#xff0c;如程序计数器、多个通用寄存器中的内容等 (2)按某种算法选取进程。调度…

洗碗机安装位置和水电预留多少才合适最实用?

越来越多的消费者选择了洗碗机这款家电&#xff0c;因为洗碗机的功能是越来越完善&#xff0c;不仅能够洗得干净&#xff0c;还具备消毒杀菌的功能&#xff0c;但是我们在选购洗碗机的时候必须做足了功课&#xff0c;洗碗机安装位置和水电预留情况&#xff0c;我们必须了解清楚…

洗碗机到底是神器,还是智商税?内行人告诉你答案,结果一目了然

一日三餐过后&#xff0c;每个家庭基本上都是出奇的一致&#xff0c;留下很多油渍菜渣的餐具和不愿洗碗的家人&#xff0c;每天餐后洗碗成为了我们最不愿面对的事情&#xff0c;有时候我们会想如果有台洗碗机就好了。洗碗机品牌和产品众多&#xff0c;我们大部分人对于洗碗机的…

2021年中国洗碗机行业发展现状分析,“懒人经济”推动下行业快速发展「图」

一、概述 洗碗机是自动清洗碗、筷、盘、碟、刀、叉等餐具的设备。在市面上的全自动可以分为家用和商用两类&#xff0c;家用全自动洗碗机只适用于家庭&#xff0c;主要有柜式、台式、水槽一体式及集成式。商用洗碗机按结构可分为柜式、罩式、篮传式、带传式、超声波5大类&…