• JVM 线上排查命令


    1、javap

    使用 javap 可以查看 Java 字节码反编译的源文件

    请添加图片描述
    示例:

    public class Test{
        public static void main(String []args) {
           System.out.println("Hello World");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    javap -c Test.class

    public class Test{
      public Test();
        Code:
           0: aload_0
           1: invokespecial #1                  // Method java/lang/Object."":()V
           4: return
     
      public static void main(java.lang.String[]);
        Code:
           0: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
           3: ldc           #3                  // String Hello World
           5: invokevirtual #4                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
           8: return
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    2、jps

    jps查询当前所有java进程请添加图片描述

    在这里插入图片描述
    在这里插入图片描述

    3、jstat

    jstat 主要用于监控JVM信息状态,主要是 GC 信息请添加图片描述
    jstat -gc 11600 来查看该进程的 GC 信息
    在这里插入图片描述
    参数含义

    • S0C 表示当前 Survivor0 的容量,S1C 表示当前 Survivor1 的容量
    • S0U 表示当前 Survivor0 的利用率,S1U 表示当前 Survivor1 的利用率
    • EC 表示 Eden 的容量,EU 表示 Eden 的利用率
    • OC 表示老年代的容量,OU 表示老年代的利用率
    • MC 表示 Metaspace 的容量,MU 表示 Metaspace 的利用率
    • CCSC 表示类指针压缩空间容量,CCSU 表示使用的类指针压缩空间
    • YGC 表示新生代 GC 的次数,YGCT 表示新生代 GC 的时间
    • FGC 表示 Full Gc 的次数,FGCT 表示 Full GC 的时间
    • GCT 表示 GC 总时间。

    每个对象都有一个指向它自身类的指针,_klass: 指向类的 4 字节指针,64 位平台上 _klass: 指向类的 8 字节的指针,为了节约这些空间,引入了类指针压缩空间。

    3、jcmd

    jcmd 可以查看 JVM 信息请添加图片描述

    jcmd pit Thread.print -l 打印指定java进程在jvm中的所有线程栈
    在这里插入图片描述
    jcmd 11600 GC.heap_dump ./dump.hprof 指定目录文件生成当前java进程的 堆内存dump,map映射信息

    在这里插入图片描述
    在这里插入图片描述

    更多命令 通过jcmd pid help 查看
    在这里插入图片描述

    4、jmap

    jmap 打印出 Java 进程内存中 Object 的情况
    请添加图片描述

    jmap 一般是用来导出 内存dump的,命令参考 Example: jmap -dump:live,format=b,file=heap.bin

    实际上新版的输入是这样的

    [root@admin ~]# jmap --help
    Usage:
        jmap [option] <pid>
            (to connect to running process)
        jmap [option] <executable <core>
            (to connect to a core file)
        jmap [option] [server_id@]<remote server IP or hostname>
            (to connect to remote debug server)
    
    where <option> is one of:
        <none>               to print same info as Solaris pmap
        -heap                to print java heap summary
        -histo[:live]        to print histogram of java object heap; if the "live"
                             suboption is specified, only count live objects
        -clstats             to print class loader statistics
        -finalizerinfo       to print information on objects awaiting finalization
        -dump:<dump-options> to dump java heap in hprof binary format
                             dump-options:
                               live         dump only live objects; if not specified,
                                            all objects in the heap are dumped.
                               format=b     binary format
                               file=<file>  dump heap to <file>
                             Example: jmap -dump:live,format=b,file=heap.bin <pid>
        -F                   force. Use with -dump:<dump-options> <pid> or -histo
                             to force a heap dump or histogram when <pid> does not
                             respond. The "live" suboption is not supported
                             in this mode.
        -h | -help           to print this help message
        -J<flag>             to pass <flag> directly to the runtime system
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    常用的 options 参数:

    • heap 显示 Java 堆详细信息
    • histo 显示堆中对象的统计信息
    • permstat 显示堆永久区的类加载器的统计信息
    • finalizerinfo 显示在 F-Queue 队列等待 Finalizer 线程执行 finalize 方法的对象
    • dump 生成堆转储快照

    5、jhat

    jhat 分析 Java 堆的命令,可以将堆中对象以 html 的形式显示出来
    请添加图片描述

    没怎么用过

    6、jstack

    jstack 是堆栈跟踪工具,主要用于打印给定进程 pid 的堆栈信息,一般在发生死锁或者 CPU 100% 的时候排查问题使用,可以去查询当前运行的线程以及线程的堆栈信息是什么情况
    请添加图片描述
    将指定java进程在jvm中的线程栈 全部打印,追加到文件中
    在这里插入图片描述

    在这里插入图片描述

    原文:https://heapdump.cn/article/2374045

  • 相关阅读:
    Java架构师内功数据库
    k8s-集群里的三种IP(NodeIP、PodIP、ClusterIP)
    3.x名称空间详解
    Fusion Compute网络虚拟化
    数字图像处理 03
    hologres 索引与查询优化
    安装4.210版本Verilator
    Godot Best practices
    Maven配置
    数据结构之队列的实现(附源码)
  • 原文地址:https://blog.csdn.net/qq_44787816/article/details/127572741