2016-03-29 10 views
0

Unser Produkt läuft auf den Servern unserer Kunden mit nur einer JRE (kein JDK) unter Windows.Erhalte einen Heap-Dump von einer JRE nur unter Windows

Ich weiß, dass ich einen Heap-Dump auf OutOfMemoryError durch ein Flag erhalten kann.

Gibt es jedoch eine Möglichkeit, einen Heapspeicherauszug aus dem JRE-JVM-Prozess proaktiv zu erstellen?

Ich plante, ein paar gesunde Heap-Dumps zu bekommen und sie mit dem Heap-Dump zu vergleichen, der auf OutOfMemoryError erhalten wurde.

Vorzugsweise sollte ich in der Lage sein, den Kunden zu bitten, dieses Tool/Dienstprogramm herunterzuladen und es dann auf dem Server auszuführen, um den Heapspeicher nach Belieben zu erhalten.

Ich versuchte jvisualvm aber jvisualvm würde unser Produkt jVM nicht auflisten. Es würde nur einige der JVMs auflisten, die zu dieser Zeit laufen, und nicht alle JVMs, die zu dieser Zeit laufen. PLUS jvisualvm ist sehr sperrig.

P.S: Gibt es Dienstprogramme von Drittanbietern, die auf dem Host von JVM ausgeführt werden können, um den Heapspeicher zu entladen? Außerdem kann der Kunde die JRE zu diesem Zeitpunkt nicht aktualisieren. Und keine der Antworten auf die vorherige Frage wird als Antwort ausgewählt!

Danke,

+0

ich diese Frage sah. Da diese Frage vor zwei Jahren gestellt wurde, suche ich nach Dienstprogrammen, die die Aufgabe erledigen können. – anjanb

Antwort

1
  1. Heap Dump aus JVM verwenden com.sun.management.HotSpotDiagnosticMXBean:

    HotSpotDiagnosticMXBean hs = 
          ManagementFactory.getPlatformMXBean(HotSpotDiagnosticMXBean.class); 
        hs.dumpHeap("/path/to/heapdump.bin", false); 
    
  2. von außen Haufen eines anderen Prozesses zu entleeren, verwenden HotSpot Dynamic Attach mechanism.
    Ich schrieb ein kleines Dienstprogramm dafür, siehe https://github.com/apangin/jattach.

    das Programm mit make bauen und dann laufen

    jattach <PID> dumpheap /path/to/heapdump.bin 
    
+0

jattach dump ein .hprof? – anjanb

+0

Ich habe versucht, auf Cygwin/Windows zu bauen, konnte es aber nicht bauen. erstelle ein Problem für dasselbe in GitHub. – anjanb

+0

@anjanb Ja, dumps .hprof, genau wie jmap. Ich habe jattach Implementierung für Windows hinzugefügt. – apangin