2009-08-12 15 views
0

Arbeiten mit einer Java-Konsole-Anwendung, kann ich dies tun:Wie bekomme ich mehrere hprof-Dumps in einer Java WebStart (JNLP) -Anwendung?

java -agentlib:hprof=heap=dump,format=b MyClass 

Dann kann ich ctrl- \ getroffen (oder Ctrl-Pause auf Windows) jedes Mal, wenn ich möchte einen Schnappschuss des Haufens nehmen später für Analyse.

Ich möchte das gleiche für eine Java Web Start-Anwendung tun, aber ich kann nicht scheinen, dass das funktioniert. Ich kann das Argument agentlib mit der Umgebungsvariablen JAVAWS_VM_ARGS übergeben, aber die Eingabe von ctrl- \ und ctrl-break in der Konsole scheint nichts zu tun. Alles, was ich bekomme, ist ein Dump, wenn das Programm startet, was nicht wirklich interessant ist, da ich mich zu diesem Zeitpunkt noch nicht einmal in unserem Programm eingeloggt und die Transaktionen ausgeführt habe, die ich analysieren möchte.

Antwort

0

Sie könnten VisualVM verwenden, um Heap-Dumps aus der laufenden Anwendung zu nehmen. Mit VisualVM können Sie die Heap-Dumps durchsuchen und speichern.

+0

Cool ... das ist in Java 1.6.0_7 und später enthalten ... – skiphoppy

+0

Leider scheint es unser Java Web Wenn ich versuche, seinen Speicher mit VisualVM zu profilieren, stürzt Anwendung ab. – skiphoppy

1

mit folgenden JMV Argumente Starten Sie Ihre Anwendung JMX zu ermöglichen und einen Listener auf Port 9004 zu starten:

-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.port="9004" 
-Dcom.sun.management.jmxremote.authenticate="false" 
-Dcom.sun.management.jmxremote.ssl="false" 

haben dann einen Blick auf dieses Java-Programm, das eine Verbindung mit dem JMX-Server machen kann und ein nehmen Heap Dump on Demand. Der Quellcode enthält Kommentare mit Links zu 2 nützlichen Artikeln im Internet, die mir geholfen haben, all das zu funktionieren. Viel Glück !

-Link: JmxHeapDumper.java

P. S. scheinbar JMX zu starten für eine WebStart App ist schwierig, ich fand diese Diskussion, hoffe es hilft: http://forums.java.net/jive/message.jspa?messageID=311717