Java虚拟机--常用工具

Published on with 0 views and 0 comments

一、javap -v

javap是jdk自带的反编译工具,可以通过控制台查看字节码文件内容

javap -v 字节码文件

image.png

二、JClasslib

idea可以安装这个插件,直接在插件市场就能搜索到,安装完成后,选中class文件,点击view,就可以看到对应选项

image.png

image.png

image.png

三、阿里Arthas

3.1 简介

官网文档https://arthas.aliyun.com/

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

3.2 下载安装

下载地址https://arthas.aliyun.com/arthas-boot.jar

git指定版本下载地址Releases · alibaba/arthas (github.com)

编写如下代码并运行

public class HelloWorld {
    public static void main(String[] args){
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                while(true){
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        throw new RuntimeException(e);
                    }
                }
            }
        });
        thread.start();
    }
}

下载后java -jar启动arthas,就能看到运行得代码

image.png

输入对应的编号,我的是2,然后回车就能进入对应的线程

image.png

3.3 常用命令

arthsa命令列表命令列表 | arthas (aliyun.com)

3.3.1 dashboard

当前系统的实时数据面板

image.png

eg: dashboard -i 2000 -n 3

间隔两秒一次,输出三次

image.png

3.3.2 dump

dump 已加载类的 bytecode 到特定目录

image.png

eg:dump -d D:/ HelloWorld 将HelloWorld得类的字节码信息导入到D盘根目录下

image.png

查看对应目录

image.png

3.3.3 jad

反编译指定已加载类的源码

image.png

eg:jad HelloWorld

image.png

四、JHSDB工具

JHSDB(Java HotSpot Diagnostic and Debugging tool)是Java Development Kit (JDK) 9及更高版本中引入的一个诊断和调试工具。它用于在运行时分析Java应用程序,可以附加到正在运行的Java进程或核心转储文件以进行后事调试。JHSDB结合了之前多个独立工具的功能,比如jdb、jmap、jinfo、jstack等,提供了一个统一的界面来进行更深入的诊断和故障排查。

主要功能包括:

  • 调试 :像传统的调试器一样,设置断点,单步执行,查看变量值等。
  • 堆栈跟踪 :显示Java线程的堆栈跟踪。
  • 内存分析 :查看和分析堆内存,包括对象、类和数组的详细信息。
  • 线程状态 :展示所有线程的状态和相关信息。
  • JVM配置 :查看和修改JVM的运行时配置参数。
  • 垃圾收集信息 :分析垃圾回收器的行为和性能。
  • 核心转储分析 :分析崩溃时的JVM核心转储文件。

使用JHSDB的基本步骤:

  1. 启动JHSDB :通常使用 jhsdb命令行工具启动。
  2. 附加到进程 :使用 attach命令附加到正在运行的Java进程,可以通过进程ID或进程名指定。
  3. 分析和调试 :使用JHSDB提供的各种命令进行分析和调试。
  4. 退出 :完成分析后,使用适当的命令退出JHSDB。

下面编写一个类内容如下,并启动运行

public class HsdbDemo {
    public static final int i=0;
    public static void main(String[] args) throws IOException {
        new HsdbDemo();
        System.in.read();
    }
}

然后启动jdk得bin目录下的sa-jdi.jar,我的jdk版本是java11,java11取消了这个jar,用jhsdb做了替代,执行jhsdb hsdb

image.png

image.png

启动后我们需要连接到指定得进程,这里需要一个进程id,这个进程id通过jps命令可以查看

image.png

输入对应线程id就可以了

image.png

然后查看对象直方图

image.png

搜索到对应对象

image.png

双击进入,然后查看详细信息

image.png


标题:Java虚拟机--常用工具
作者:wenyl
地址:http://www.wenyoulong.com/articles/2024/07/19/1721371221848.html