2017-10-17 29 views
5

jcmd VM.set_flag seçeneği ile denemeler yapmaya çalışıyordum. Ancak "sadece 'yazılabilir' bayrakların ayarlanabileceğini söyleyen bir hatayla karşılaştım". Yazılabilir bayraklar nelerdir? vm bayraklarını değiştirmeye mi çalışıyorsunuzjcmd VM.set_flag, hangi bayraklar yazılabilir?

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

:

benim pid alınıyor

[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 

Düzenleme: Bu yönetilebilir bayrakları çalıştı aşağıda başarılı komutlardır.

[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 aracılığıyla java 9 mevcuttur, bu jdk9 özgü bir seçenektir. öyle değil mi – Vipin

cevap

3

Yazılabilir bayrakları {manageable} olarak etiketlenir.

Tüm bayrakları jcmd 12345 VM.flags -all ile listeleyebilirsiniz. Daha sonra (benim Oracle jdk8 VM üzerindedir) yönetilebilir olanlar için yazılması edebilirsiniz:

$ 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

bu VM options devletler üzerinde madde: - dinamik olan yönetilebilir olarak

Bayraklar işaretli JDK yönetim arabiriminden (com.sun.management.HotSpotDiagnosticMXBean API) ve ayrıca JConsole aracılığıyla yazılabilir.

Eğer VM.flags olur

Baskı VM bayrak seçenekleri ve mevcut değerleri seçenek olarak -all ile

için

kullanabilirsiniz tüm bu bayrakları öğrenmek için

VM

tarafından desteklenen tüm bayrakları basar komutunu kullanarak

: -

jcmd <pid> VM.flags -all 
İlgili konular