2017-10-17 6 views
5

jcmd VM.set_flag 옵션을 실험 해 보려고했습니다. 그러나 "하나의 '쓰기 가능'플래그 만 설정할 수 있다는 오류를 발견했습니다. 쓰기 가능한 플래그 란 무엇입니까? VM 플래그를 변경하려고jcmd VM.set_flag, 플래그는 쓸 수 있습니까?

[email protected]:~/javacode$ jcmd -l 
6294 Test 
6295 jdk.jcmd/sun.tools.jcmd.JCmd -l 

:

내 PID를 얻기

[email protected]:~/javacode$ jcmd 6294 VM.set_flag ConcGCThreads 4 
6294: 
only 'writeable' flags can be set 
[email protected]:~/javacode$ jcmd 6294 VM.set_flag MaxNewSize 1G 
6294: 
only 'writeable' flags can be set 

편집 : 그것은 관리 플래그 근무, 아래 성공적인 명령입니다.

[email protected]:~/javacode$ jcmd 11441 VM.flags -all | grep MinHeapFreeRatio 
    uintx MinHeapFreeRatio       = 40         {manageable} {default} 
[email protected]:~/javacode$ jcmd 11441 VM.set_flag MinHeapFreeRatio 45 
11441: 
Command executed successfully 
[email protected]:~/javacode$ jcmd 11441 VM.flags -all | grep MinHeapFreeRatio 
    uintx MinHeapFreeRatio       = 45  
+2

VM.set_flag이 http://openjdk.java.net/jeps/228를 통해 자바 (9)에서 사용할 수 있습니다, 그것은 jdk9 특정 옵션입니다. 그렇지 않아? – Vipin

답변

3

쓰기 가능한 플래그는 {manageable}으로 표시됩니다.

모든 플래그를 jcmd 12345 VM.flags -all과 함께 나열 할 수 있습니다. 그런 다음합니다 (내 오라클 jdk8 VM에) 관리 것들에 대한 grep을 할 수

$ 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

이것을 VM options 상태에 대한 기사 : - 동적 있습니다 관리

플래그 표시 JDK 관리 인터페이스 (com.sun.management.HotSpotDiagnosticMXBean API) 및 JConsole을 통해 쓰기 가능

VM.flags

를 인쇄 VM 플래그 옵션과 현재 값 옵션으로 -all

을 사용할 수 있습니다 이러한 모든 플래그를 찾으려면

VM에서 지원하는 모든 플래그를 인쇄합니다.

명령을 사용하여

: -

jcmd <pid> VM.flags -all