目录
4、应用2:修改特定进程的“manageable”虚拟机参数
官方文档
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)查看类加载
-class2)即时编译
-compiler
-printcompilation3)查看垃圾回收情况信息
-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之外所有命令的功能。
。。。。。。