2011-01-11 9 views
6

Ich habe versucht, Webstart zu einem Heap-Dump ablegen, wenn es nicht genügend Arbeitsspeicher hat.Java-Webstart-Heap-Dump

Ich kenne die jmap/jconsole Art und Weise, es zu tun, aber was ich wirklich tun möchte, ist die Option zu jnlp Datei hinzufügen und haben die folgenden Optionen versucht.

  1. j2se version = "1.6 +" java-vm-args = "- Server + HeapDumpOnOutOfMemoryError" max-heap-size = "768M"
  2. j2se version = "1.6 +" java-vm-args = "-Server -XX: + HeapDumpOnOutOfMemoryError" max-heap-size = "768M"
+1

Welche Ergebnisse erhalten Sie, wenn Sie das Programm mit diesen Optionen ausführen? – Davidann

+0

, da das Manipulieren des Client-Computers (das Ablegen einer Datei auf dem lokalen Computer) umfasst. Ich wäre nicht überrascht, wenn es Sicherheitskontrollen um diese Option gäbe. Es kann vollständig verweigert werden oder zusätzliche Berechtigungen erfordern. – jtahlborn

+0

Haben Sie versucht, auch den Pfad anzugeben, indem Sie zum Beispiel '-XX: HeapDumpPath =/tmp' hinzufügen? –

Antwort

2

Es wird auf jeden Fall nicht, wenn Sie diese Option, um die Datei jnlp platzieren. Es gibt eine Liste von erlaubten Optionen und die anderen werden ignoriert. Sie können die Liste der verfügbaren JVM-Optionen in der documentation überprüfen.

Beachten Sie, dass der Endbenutzer Ihre Anwendung auf seinem Computer ausführen wird. Was würdest du mit dem Heap Dump auf seinem Computer machen? Es könnte jemand auf der Welt sein, der deine App betreibt. Es macht wenig Sinn, wenn Sie dies mit JVM für Endbenutzer über Ihre JNLP-Datei tun dürfen.

Die einzige Situation, über die ich nachdenken kann, wäre, dass Sie Zugriff auf diesen Computer haben und Sie den Speicherauszug später überprüfen können. In diesem Fall (Sie als Endbenutzer fordern den Dump) ist es tatsächlich möglich, wenn Sie den Autorun der jnlp-Datei vom Browser umgehen und ihn selbst über den Befehl javaws ausführen. Die Schritte, die ich gemacht habe und die zum Erfolg führen, wurden wie folgt (die jnlp Datei testOOM.jnlp war übernehmen und Sie sind auf Windows):

  1. die JNLP-Datei mit dem zu dem Verzeichnis
  2. von der Kommandozeile herunterladen JNLP-Datei
  3. javaws -verbose -J-XX:+HeapDumpOnOutOfMemoryError testOOM.jnlp

ausführen mit dieser die App wird als aus dem Browser in der gleichen Art und Weise gestartet werden. Beachten Sie jedoch die Option -J, mit der Sie der JVM JVM-Optionen bereitstellen können. Dies ist in Ordnung, weil es der Ebd-Benutzerclient ist, der den Dump angefordert hat.

Unter OutOfMemoryError wird der Heapspeicherauszug im selben Verzeichnis gespeichert, in dem Sie den Befehl javaws ausführen.

+0

Vielen Dank, wir verteilen intern, so können wir die Dumps tatsächlich bekommen, sehen, ob wir ein Skript bekommen können, um es auszuführen – benjipete

+0

Froh, zu helfen :) –

+0

Es macht für mich Sinn, dass ein Entwickler eine Webstart-Anwendung haben möchte Erzeugen Sie einen Heap-Dump. Du hast Recht, dass in einer Produktions-App mit vielen Nutzern, mit denen der Entwickler keinen direkten Kontakt hat, dies unbrauchbar wäre. Während der Entwicklung gibt es Beta-Benutzer, Testbenutzer und Benutzer, die ebenfalls im Entwicklungsteam sind. Dies ist mein Fall ... und sie sind schlau genug, um die Heap-Dump-Datei zu mir zu bekommen, wenn sie generiert wird.Diese Option wäre außerordentlich nützlich und macht sehr viel Sinn für mich. – Jason