• 深入理解Java虚拟机读书笔记--5 JVM工具


    对应《深入理解Java虚拟机》4.2 4.3节的内容

    虚拟机性能监控 故障处理工具

    系统定位问题时:知识是基础,数据是依据,工具是手段

    数据包括:异常堆栈、虚拟机运行日志、垃圾收集器日志、线程快照(threaddump/javacore文件)、堆转储快照(heapdump/hprof文件)等

    基础故障处理工具

    jps (JVM Process Status Tool) 虚拟机进程状况工具

    可以列出正在运行的虚拟机进程,并显示虚拟机执行主类名称以及这些进程的本地虚拟机唯一ID(LVM ID,Local Virtual Machine Identifier)。
    其他的JDK工具大多需要输入它查询到的 LVM ID 来确定要监控的是哪一个虚拟机进程

    > jps -help
    usage: jps [-help]
           jps [-q] [-mlvV] []
    
    Definitions:
        :      [:]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • -q 只输出LVM ID,省略主类的名称
    • -m 输出虚拟机启动时传输给主类main函数的参数
    • -l 输出主类的全名,若执行的是jar,则输出jar路径
    • -v 输出虚拟机进程启动时的JVM参数

    jstat(JVM Statistics Monitoring Tool) 虚拟机统计信息监视工具

    用于监视虚拟机各种运行状态信息的命令行工具,可以显示本地或者远程虚拟机进程中的类加载内存垃圾收集即时编译等运行时数据

    jstat
    2.17 The jstat Utility


    jstat [option] vmid [interval [s|ms]] [count]

    1. option
    • -class 监视类加载/卸载数量、总空间以及类装载所耗费的时间
    • -gc 监视Java堆状况,包括伊甸区、幸存区、年老代等的容量,已用空间,垃圾收集时间合计等信息
    1. vmid

    如果是本地虚拟机进程,VM ID 与 LVM ID 是一致的;

    如果是远程虚拟机进程,那 VM ID 的格式应当是:[protocol:][//]lvmid[@hostname[:port]/servername]

    1. interval

    查询间隔 (默认 ms)

    1. count

    查询次数


    案例:查询vmid为19552的进程每秒输出1次,一共10次

    jstat -gc 19552 1000 10

    jstat -gc 19552 1s 10


    jinfo(Configuration Info for Java) Java配置信息工具

    实时查看和调整虚拟机各项参数

    > jinfo -help
    Usage:
        jinfo [option] 
            (to connect to running process)
        jinfo [option] 
            (to connect to a core file)
        jinfo [option] [server_id@]
            (to connect to remote debug server)
    
    where 
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    案例:

    jinfo -flag CMSInitiatingOccupancyFraction 19552

    jinfo -flag UseSerialGC 19552

    https://blog.csdn.net/u010979642/article/details/88764132

    jmap (Memory Map for Java) Java内存映像工具

    用于生成堆转储快照(一般称为heapdump或dump文件)、查询finalize执行队列、Java堆和方法区的详细信息、空间使用率、当前用的是哪种收集器等

    使用-XX:+HeapDumpOnOutOfMemoryError参数也可以让虚拟机在内存溢出异常出现之后自动生成堆转储快照文件

    jmap [option]

    使用 jmap -h 可查看所有可选项


    案例:生成堆快照文件

    jmap -dump:format=b,file=dump.bin 19552


    案例:显示Java堆详细信息

    jmap -heap 144

    Attaching to process ID 144, please wait...
    Debugger attached successfully.
    Server compiler detected.
    JVM version is 25.221-b11
    
    using thread-local object allocation.
    Parallel GC with 13 thread(s)
    
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    jhat (JVM Heap Analysis Tool) 虚拟机堆转储快照分析工具

    与 jmap 搭配使用,来分析 jmap -dump 生成的堆转储快照

    jhat内置了一个微型的HTTP/Web服务器,生成堆转储快照的分析结果后,可以在浏览器中查看

    VisualVM 、Eclipse Memory Analyzer 也都可以用来分析堆转储快照,且比 jhat 功能强大

    jhat dump.bin

    提示 Server is ready 后,在浏览器中输入 http://localhost:7000/ 可以看到分析结果

    jstack (Stack Trace for Java) Java堆栈跟踪工具

    用于生成虚拟机当前时刻的线程快照
    线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的目的通常是定位线程出现长时间停顿的原因

    jstack [option] vmid


    • -F 当正常输出的请求不被响应时,强制输出线程堆栈
    • -l 除堆栈外,显示关于锁的附加信息
    • -m 如果调用本地方法的话,可以显示C/C++的堆栈

    案例:

    jstack -l 144

    其他工具

    查看$JAVA_HOME/bin下的工具,每个JDK版本下的工具会有差别

    jdk1.8下会有一个 jvisualvm 工具,是一种图形化工具;提供内存和CPU分析,堆文件分析、内存泄露检测、MBean访问和垃圾收集;但从jdk9开始不再打包进JDK中,需要独立下载

    jcmd (JVM Command 虚拟机诊断命令工具)将诊断命令请求发送到正在运行的Java虚拟机

  • 相关阅读:
    HTTP常见面试题(小林coding版总结)
    【从头构筑C#知识体系】2.1 泛型
    【进程VS容器VS虚拟机】
    后台模仿promise.all实现异步,提升代码速度
    哪个牌子的电容笔好用?ipad触控笔推荐平价
    二叉搜索树
    2022强网拟态pwn-store
    猫影视开源!2022年最新点播直播软件!
    SpringBoot数据库管理 - 用flyway对数据库管理和迁移
    Linux基础知识——概述和常用文件管理命令
  • 原文地址:https://blog.csdn.net/u013837825/article/details/126494562