Jcmd VM.set_flag, which flags are writable?

I tried to experiment with the jcmd option VM.set_flag. But I came across one mistake saying that "only" writable "flags" can be set. What are recordable flags?

Getting my pid:

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

Trying to change vm flags:

 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 

Edit: it worked for managed flags, below are successful teams.

 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 
+5
source share
2 answers

Writable flags are referred to as {manageable} .

You can list all flags with jcmd 12345 VM.flags -all . Then you can use grep for managed ones (on my 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} 
+3
source

The VM Parameters article states the following: -

Flags marked as managed are dynamically written through the JDK management interface ( com.sun.management.HotSpotDiagnosticMXBean API) and also through the JConsole.

To find out all such flags, you can use VM.flags , which

Print VM flag options and their current values

with -all as an option

Print all flags supported by VM

using the command: -

 jcmd <pid> VM.flags -all 
+3
source

Source: https://habr.com/ru/post/1272683/


All Articles