持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第13天,点击查看活动详情
前一章节介绍了使用jhat分析堆转储文件的方法。本章继续学习其他的操作命令
jinfo,看看这个命令能够帮助我们分析哪些jvm的问题。
jinfo
此命令用于查看JVM的系统属性,并且可以动态设置一些系统属性,动态修改属性的能力还是非常有限的,但是确实可以帮助我们便捷的查看某些jvm参数。
我们一起看下其帮助文档:
[root@hecs-402944 ~]# 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 [option] <pid>使用线程pid进行查看
下面介绍下每种参数的含义;
-flag <name>其中的name可以指定我们想要查看的参数-flag [+|-]<name>启用或禁用指定的参数-flag <name>=<value>修改指定的参数-flags打印VM系统参数-sysprops打印java系统属性
适用方式:
获取进程pid:
[root@hecs-402944 ~]# jps
21203 jar
1379 Jps
-
不指定参数获取所有
jinfo 21203 -
获取最大可用堆内存
[root@hecs-402944 ~]# jinfo -flag MaxHeapSize 21203 -XX:MaxHeapSize=1073741824 -
获取全部VM参数
[root@hecs-402944 ~]# jinfo -flags 21203 Attaching to process ID 21203, please wait... Debugger attached successfully. Server compiler detected. JVM version is 25.332-b09 Non-default VM flags: -XX:CICompilerCount=2 -XX:InitialHeapSize=1073741824 -XX:+ManagementServer -XX:MaxHeapSize=1073741824 -XX:MaxNewSize=357564416 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=357564416 -XX:OldSize=716177408 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseParallelGC Command line: -Dcom.sun.management.jmxremote=true -Djava.rmi.server.hostname=122.112.181.245 -Dcom.sun.management.jmxremote.port=8090 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Xms1g -Xmx1g -
打印系统属性
jinfo -sysprops 21203 -
修改属性
并非所有属性都能修改,只有被
manageable标记的才可以修改,可以通过如下方式查看有哪些可修改的属性:[root@hecs-402944 ~]# java -XX:+PrintFlagsFinal -version|grep manageable intx CMSAbortablePrecleanWaitMillis = 100 {manageable} intx CMSTriggerInterval = -1 {manageable} intx CMSWaitDuration = 2000 {manageable} bool HeapDumpAfterFullGC = false {manageable} bool HeapDumpBeforeFullGC = false {manageable} bool HeapDumpOnOutOfMemoryError = false {manageable} ccstr HeapDumpPath = {manageable} uintx MaxHeapFreeRatio = 100 {manageable} uintx MinHeapFreeRatio = 0 {manageable} bool PrintClassHistogram = false {manageable} bool PrintClassHistogramAfterFullGC = false {manageable} bool PrintClassHistogramBeforeFullGC = false {manageable} bool PrintConcurrentLocks = false {manageable} bool PrintGC = false {manageable} bool PrintGCDateStamps = false {manageable} bool PrintGCDetails = false {manageable} bool PrintGCID = false {manageable} bool PrintGCTimeStamps = false {manageable} uintx ShenandoahSoftMaxHeapSize = 0 {manageable} openjdk version "1.8.0_332" OpenJDK Runtime Environment (build 1.8.0_332-b09) OpenJDK 64-Bit Server VM (build 25.332-b09, mixed mode)-
修改boolean值的参数
PrintGC:开启PrintGC:
jinfo -flag +PrintGC 21203关闭PrintGC:
jinfo -flag -PrintGC 21203结果我们可以使用前面学的命令查看,如下图所示:
-
总结
以上就是关于jinfo命令的简介了。
jinfo作为一个jvm参数的查询工具非常的方便,能够快速的得到我们想要的结果。
关于修改指定数值的操作这里就不演示了,大家自己动手操作实验一下。使用过程中,要充分了解每个参数的含义,避免出现问题,或达不到预想的效果。