深入理解Java虚拟机读书笔记--7 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] [<hostid>]

Definitions:
    <hostid>:      <hostname>[:<port>]
  • -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] <pid>
        (to connect to running process)
    jinfo [option] <executable <core>
        (to connect to a core file)
    jinfo [option] [server_id@]<remote server IP or hostname>
        (to connect to remote debug server)

where <option> is one of:
    -flag <name>         to print the value of the named VM flag
    -flag [+|-]<name>    to enable or disable the named VM flag
    -flag <name>=<value> to set the named VM flag to the given value
    -flags               to print VM flags
    -sysprops            to print Java system properties
    <no option>          to print both of the above
    -h | -help           to print this help message

案例:

jinfo -flag CMSInitiatingOccupancyFraction 19552

jinfo -flag UseSerialGC 19552

https://blog.youkuaiyun.com/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)

...
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虚拟机

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值