深入拆解Java虚拟机 30 | Java虚拟机监控和诊断工具(命令行篇)

目录

官方文档

一:jps

1、作用

2、使用方法

3、注意事项

二:jstat

1、作用

2、命令解读

2、使用案例

三:jinfo

1、作用

2、使用方法

3、应用1:获取查看与特定进程相关的参数。

4、应用2:修改特定进程的“manageable”虚拟机参数

四:jstack

1、作用

2、典型应用场景:死锁检测

3、使用案例

五:jmap

1、作用

2、原理

3、局限

4、jmap与jstat的比较

5、命令解读

六:jcmd


官方文档

JDK11的命令行工具介绍:https://docs.oracle.com/en/java/javase/11/tools/tools-and-command-reference.html

 

一:jps

1、作用

可以打印所有正在运行的 Java 进程。

2、使用方法

1)获取jps的使用帮助

jps help

2)默认情况(输出Java进程ID以及主类名)

jps

结果如下:

$ jps
3360 Jps
4816
3428 Launcher
7364
2572 Bootstrap
7356 RemoteMavenServer

3)查看进程的模块名或包名

jps -l

4)查看传递给虚拟机的参数,如-XX:+UnlockExperimentalVMOptions -XX:+UseZGC

jps -v

5)查看传递给主类的参数

jps -m

3、注意事项

1)如果某 Java 进程关闭了默认开启的UsePerfData参数(即使用参数-XX:-UsePerfData),那么jps命令(以及下面介绍的jstat)将无法探知该 Java 进程。

2)当获得 Java 进程的进程 ID 之后,我们便可以调用接下来介绍的各项监控及诊断工具了。

 

二:jstat

1、作用

允许用户查看目标 Java 进程的类加载、即时编译以及垃圾回收相关的信息。它常用于检测垃圾回收问题以及内存泄漏问题。

2、命令解读

通过 jstat -options 可知,该命令可以:
1)查看类加载  
  -class

2)即时编译  
  -compiler
  -printcompilation

3)查看垃圾回收情况信息
  -gc
  -gccapacity     
  -gccause        
  -gcmetacapacity 
  -gcnew          
  -gcnewcapacity  
  -gcold          
  -gcoldcapacity  
  -gcutil

2、使用案例

1)查看虚拟机的内存分配状态,条件是:每隔2s,共打印4次

jstat -gc 2572 2s 4

2)参数-t能打印出该Java进程已经运行的时间长度

jstat -gc -t 2572 1s 10

 

三:jinfo

1、作用

1)将打印目标 Java 进程的配置参数

2)能够改动其中 manageabe 的参数

2、使用方法

jinfo -help

3、应用1:获取查看与特定进程相关的参数。

jinfo 2572

该命令,可以获取如下信息:

1)传递给 Java 虚拟机的-X(即输出中的 jvm_args)
2)传递给 Java 虚拟机的-XX参数(即输出中的 VM Flags)
3)可在 Java 层面通过System.getProperty获取的-D参数(即输出中的 System Properties)

4、应用2:修改特定进程的“manageable”虚拟机参数

1)案例:开启Java进程的HeapDumpAfterFullGC参数

jinfo -flag +HeapDumpAfterFullGC 2572

2)查看所有可以修改的“manageable”参数

java -XX:+PrintFlagsFinal -version | grep manageable

 

四:jstack

1、作用

将打印目标 Java 进程中各个线程的栈轨迹、线程状态、锁状况等信息。它还将自动检测是否存在死锁。

2、典型应用场景:死锁检测

3、使用案例

jstack 2572  #查看pid=2572的线程的栈信息

 

五:jmap

1、作用

1)允许用户统计目标 Java 进程的堆中存放的 Java 对象;

2)可以将堆快照导出成二进制文件;

2、原理

jmap是基于安全点机制统计的堆信息。所以,基于jmap进行的分析结果可能与实际情况有些偏差。比如,如果对象的生命周期在两个安全点之间,那么:live选项将无法探知到这些对象。

3、局限

该命令依赖Attach API,只能监控本地Java进程。jinfo、jstack、jcmd等命令都是基于Attach API,所以都会有这个特点。

4、jmap与jstat的比较

1)jstat命令无需等待,因为虚拟机会主动将jstat所需要的摘要数据保存在固定位置中。
2)jmap则需要线程跑到安全点才能打印出堆信息,所以可能存在等待的情况。

5、命令解读

$ jmap
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:
    -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  #将打印被加载类的信息

    -heap                to print java heap summary  #打印堆信息

    -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

 

六:jcmd

是一把瑞士军刀,可以用来实现除了jstat之外所有命令的功能。

。。。。。。

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值