java性能分析--jvm属性查看工具【jinfo】

409 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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
      

      结果我们可以使用前面学的命令查看,如下图所示:

    image.png

总结

以上就是关于jinfo命令的简介了。

jinfo作为一个jvm参数的查询工具非常的方便,能够快速的得到我们想要的结果。

关于修改指定数值的操作这里就不演示了,大家自己动手操作实验一下。使用过程中,要充分了解每个参数的含义,避免出现问题,或达不到预想的效果。