2016-07-14 14 views
2

Ich versuche zu debuggen, wie viel Speicher mein Java-Prozess verbraucht. Bitte korrigieren Sie mich, falls ich falsch liege.Liest ich diesen Top-Befehl richtig?

PID USER  PR NI VIRT RES SHR S %CPU %MEM  TIME+ COMMAND 
11798 root  20 0 17.354g 6.084g 164456 S 38.9 10.2 12:52.04 java 

Dies ist der Prozess. Und so beginne ich diese Java-Anwendung

'-server -Xmx10G -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps' 

Wie Sie sehen können, gebe ich dieser Anwendung 10G Speicher. Aber laut der oberen Hilfeseite% MEM ist der Prozentsatz der tatsächlichen Speichernutzung. In diesem Fall nehme ich an, dass es nur 10% von 10G verwendet?

Der Grund, warum ich das frage, weil ich die -Xmx auf 3GB reduzieren möchte, wenn es nur 1GB verwendet, dann wird es 10G geben wird ein bisschen Overkill sein.

Meine Frage ist, bin ich richtig in der Annahme, dass 10% ist die tatsächliche Nutzung des Speichers dieses Prozesses, so dass ich -Xmx-Option, so kann andere Prozess mehr Speicher erhalten.

+1

'Xmx' ist" maximale Grenze ". Es ist nicht "allokieren so viel", es ist "nicht mehr als so viel zuweisen" –

+1

% MEM ist der Prozentsatz des tatsächlichen Arbeitsspeichers relativ zum gesamten Systemspeicher verwendet. –

+0

Warum verwenden Sie Java VisualVM nicht in JDK? – mariusz2108

Antwort

1

Nein, 10,2% in% MEM-Spalte bedeutet nicht, dass 10,2% von dem, was JVM zugewiesen ist. "top" ist sich nicht bewusst, welche JVM-Startoptionen Sie verwenden. Die man-Seite für "top" definiert% MEM als

"Der aktuell verwendete Anteil einer Aufgabe an verfügbarem physischem Speicher."

So ist der gesamte verfügbare Systemspeicher (physisch nicht virtuell).