首页 > 其他分享 >Arthas简单入门

Arthas简单入门

时间:2023-08-26 09:33:30浏览次数:43  
标签:java 入门 简单 jar attach Arthas arthas com

简介

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

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

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

下载

下载jar包

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

下载全量包,其中也包含arthas-boot.jar
https://arthas.aliyun.com/download/latest_version?mirror=aliyun

使用

java -jar arthas-boot.jar

选择要attach进程,之后进入Arthas的交互式界面。

命令示例

memory #查看内存信息
ognl '@className@field' #查询静态类的静态字段值
jad class_name #反编译指定类,内部是使用cfr库来实现的

更多命令可以查询官方文档

遇到的问题

运行Arthas的jdk版本必须和要attach的java进程的jdk版本一致,不然就会抛异常

[ERROR] Start arthas failed, exception stack trace:
com.sun.tools.attach.AttachNotSupportedException: Unable to attach to 64-bit process
        at sun.tools.attach.WindowsVirtualMachine.openProcess(Native Method)
        at sun.tools.attach.WindowsVirtualMachine.<init>(WindowsVirtualMachine.java:56)
        at sun.tools.attach.WindowsAttachProvider.attachVirtualMachine(WindowsAttachProvider.java:69)
        at com.sun.tools.attach.spi.AttachProvider.attachVirtualMachine(AttachProvider.java:194)
        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:161)

当时两个版本分别为jdk8和jdk11。

简单原理分析

java -jar arthas-boot.jar
  • 启动类为 com.taobao.arthas.boot.Bootstrap
  • 先使用jdk提供的jps命令查询出所有进程,去除当前程序的
  • 再运行com.taobao.arthas.client.TelnetConsole的main()方法
  • 再运行arthas-core.jar,实际上是com.taobao.arthas.core.Arthas类的main()方法
  • 在Arthas类中,使用VirtualMachine将arthas-agent.jarattach到我们的目标程序上
  • 执行AgentBootstrap类的agentmain(String,Instrumentation)方法
  • 使用Instrumentation对象来创建com.taobao.arthas.core.server.ArthasBootstrap类
  • ArthasBootstrap内部会创建Netty服务器来监听客户端命令并处理

参考

Arthas官网
Arthas源码-github
java反编译器cfr
Java Agent入门
Arthas原理:如何做到与应用代码隔离?

标签:java,入门,简单,jar,attach,Arthas,arthas,com
From: https://www.cnblogs.com/strongmore/p/17179603.html

相关文章

  • java入门
    java入门1、java语言简介1、java语言优点使用最广泛,且简单易学java是一门强类型语言java是非常完善的异常处理机制java提供了对大数据的基础性的支持2、java语言特点开源:java源代码是开饭的。跨平台:用java编写的代码或程序,可以在不同的操作系统上运行。JV......
  • 8.Acwing基础课第795题-简单-前缀和
    8.Acwing基础课第795题-简单-前缀和题目描述输入一个长度为n的整数序列。接下来再输入m个询问,每个询问输入一对l,r。对于每个询问,输出原序列中从第l个数到第r个数的和。输入格式第一行包含两个整数n和m。第二行包含n个整数,表示整数数列。接下来m行,每行包含......
  • 11.Acwing基础课第795题-简单-前缀和
    11.Acwing基础课第795题-简单-前缀和题目描述输入一个n行m列的整数矩阵,再输入q个操作,每个操作包含五个整数,,,,c,其中(,)和(,)表示一个子矩阵的左上角坐标和右下角坐标。每个操作都要将选中的子矩阵中的每个元素的值加上c。请你将进行完所有操作后的矩阵输出。输......
  • 10.Acwing基础课第797题-简单-差分
    10.Acwing基础课第797题-简单-差分题目描述输入一个长度为n的整数序列。接下来输入m个操作,每个操作包含三个整数l,r,c,表示将序列中[l,r]之间的每个数加上c。请你输出进行完所有操作后的序列。输入格式第一行包含两个整数n和m。第二行包含n个整数,表示整数序列......
  • 9.Acwing基础课第796题-简单-子矩阵的和
    9.Acwing基础课第796题-简单-子矩阵的和题目描述输入一个n行m列的整数矩阵,再输入q个询问,每个询问包含四个整数,,,,表示一个子矩阵的左上角坐标和右下角坐标。对于每个询问输出子矩阵中所有数的和。输入格式第一行包含三个整数n,m,q。接下来n行,每行包含m个整数,表示......
  • 12.Acwing基础课第799题-简单-最长连续不重复子序列
    12.Acwing基础课第799题-简单-最长连续不重复子序列题目描述给定一个长度为n的整数序列,请找出最长的不包含重复的数的连续区间,输出它的长度。输入格式第一行包含整数n。第二行包含n个整数(均在0∼1050∼105范围内),表示整数序列。输出格式共一行,包含一个整数,表示最长的不......
  • 网关快速入门
            ......
  • SELinux 入门 pt.2
    哈喽大家好,我是咸鱼在《SELinux入门pt.1》中,咸鱼向各位小伙伴介绍了SELinux所使用的MAC模型、以及几个重要的概念(主体、目标、策略、安全上下文)我们还讲到:对于受SELinux管制的进程,会先检查SELinux策略规则,然后再检查DAC规则对于不受SELinux管制的进程,仍然会执......
  • Elasticsearch 保姆级入门篇
    Elasticsearch是一个分布式的、面向生产规模工作负载优化的搜索引擎。Kibana可以将Elasticsearch中的数据转化为直观的图表、图形和仪表盘。这篇文章,您将学习本地安装Elasticsearch和Kibana,以及使用开发工具/JavaSDK创建索引和搜索数据。1本地安装1.1创建网络......
  • 教你写出高质量函数,简单又实用
    在编写函数时,程序员通常需要遵循以下步骤进行:1、确定最佳的设计逻辑是编写函数时应该考虑的重要因素。这些因素包括设计合理的数据结构、算法和逻辑封装,并且还要考虑到用户的安全因素。挑战在于确保所设计的方案既满足客户需求,又能得到客户的认可,并且要在项目的时间范围内完成。2......