jcmd VM.set_flag,哪些标志是可写的?

时间:2017-10-17 08:01:47

标签: java java-9 jcmd

我试图尝试使用jcmd VM.set_flag选项。但是遇到了一个错误,上面写着"只有'可写'标志可以设置"。什么是可写标志?

得到我的pid:

XXX@XXX-Air:~/javacode$ jcmd -l
6294 Test
6295 jdk.jcmd/sun.tools.jcmd.JCmd -l

尝试更改vm标志:

XXX@XXX-Air:~/javacode$ jcmd 6294 VM.set_flag ConcGCThreads 4
6294:
only 'writeable' flags can be set
XXX@XXX-Air:~/javacode$ jcmd 6294 VM.set_flag MaxNewSize 1G
6294:
only 'writeable' flags can be set

编辑:它适用于可管理的标志,下面是成功的命令。

 XXXX@XXX-Air:~/javacode$ jcmd 11441 VM.flags -all | grep MinHeapFreeRatio
    uintx MinHeapFreeRatio                         = 40                                    {manageable} {default}
XXXX@XXX-Air:~/javacode$ jcmd 11441 VM.set_flag MinHeapFreeRatio 45
11441:
Command executed successfully
XXXX@XXX-Air:~/javacode$ jcmd 11441 VM.flags -all | grep MinHeapFreeRatio
    uintx MinHeapFreeRatio                         = 45    

2 个答案:

答案 0 :(得分:3)

可写标记标记为{manageable}

您可以使用jcmd 12345 VM.flags -all列出所有标记。然后,您可以grep查找可管理的文件(在我的Oracle jdk8 VM上):

$ jcmd 12345 VM.flags -all | 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}

答案 1 :(得分:2)

VM options上的文章指出: -

  

标记为 可管理 的标志通过JDK动态可写   管理界面(com.sun.management.HotSpotDiagnosticMXBean API)   还通过JConsole。

要查找所有此类标记,您可以使用

VM.flags
  

打印VM标记选项及其当前值

-all为选项

  

打印VM支持的所有标志

使用命令: -

jcmd <pid> VM.flags -all
相关问题