Speicherabbild von Nuclos erstellen
Es ist oft möglich, ein Speicherabbild selbst dann noch zu erstellen, wenn der Java Process bereits OutOfMemoryExceptions
geworfen (und geloggt) hat. Im Probelmfall sollten Sie stets versuchen ein solches post-mortem Speicherabbild zu erzeugen, bevor sie Nuclos neu starten.
Manchmal ist es sinnvoll, ein Speicherabbild von Nuclos zu erstellen, z.B. für
- Aufspüren von Speicherlöchern
- Post-Mortem Analyse eines Freezes bzw. Absturzes
- Profiling von Nuclos
(Welche Teile des Codes benötigen viel Zeit und warum?) - Unterstützung der Fehlerbehebung, wenn Sie ein Ticket eröffnet haben.
(Novabit wird Sie dann u.U. bitten, ein Speicherabbild zu erstellen und zur Verfügung zu stellen)
Dem Wesen nach enthält ein Speicherabbild vertrauliche Daten aus Ihrer Nuclos Anwendung. Daher sollten sie ein solches Speicherabbild nur Personen zur Verfügung stellen, denen Sie vertrauen. Vielleicht möchten Sie das Speicherabbild sogar für den Transportweg verschlüsseln.
Ein Speicherabbild kann sowohl von einem Nuclos Client als auch von einem Nuclos Server erstellt werden.
Vorbereitung
Zur Erstellung eines Speicherabbildes benötigen Sie ein JDK (ein JRE reicht nicht!) auf dem Computersystem, auf dem Sie Nuclos laufen lassen (auf dem Client, falls Sie ein Nuclos Client Speicherabbild erzeugen wollen; auf dem Server, falls Sie ein Nuclos Server Speicherabbild erzeugen wollen).
Möchten Sie ein Speicherabbild eines Nuclos Servers, der unter Windows als Dienst läuft, erstellen, so müssen Sie zudem weitere Maßnahmen durchführen. Sie müssen sicher stellen, dass die Java VM des Servers (tomcats) mit bestimmten JMX Parametern gestartet wird. Details finden Sie unter Tomcat Administration.
Neuere Nuclos Installer unterstützen im Entwicklungsmode die Angabe eines JMX Ports. Sie müssen in diesem Fall also nur sicherstellen, dass Sie den Server im Entwicklungsmode installieren.
Speicherbild mit jvisualvm
Die Installation Ihres JDKs beinhaltet eine Datei bin/jvisualvm bzw. bin/jvisualvm.exe
, die Sie nun starten.
Wählen Sie im Baum links (Applications) die JavaVM Instanz, von der Sie das Speicherabbild erzeugen wollen, mit der rechten Maustaste aus. Ein Nuclos Server ist in diesem Baum als Tomcat verzeichnet, ein Nuclos Client als Java Web Start. Das Hauptfenster sollte ähnlich wie der folgende Screenshot aussehen:
Wenn der Server als Windows Dienst läuft, können Sie ihn hier nicht direkt sehen. Sie müssen den Server im Entwicklungsmode betreiben (s.o.) und dann mit der rechten Maustaste auf den 'Local' Eintrag klicken: Context Menu -> Add JMX Connection... -> 'localhost:<JMX Port>' eingeben -> OK
Wählen Sie nun hintereinander sowohl Thread Dump als auch Heap Dump. Dadurch öffen sich rechts zwei neue Reiter.
Speichern Sie die beiden Dumps als Dateien ab, indem Sie sie links mittels rechter Maustaste auswählen:
Diese beiden Dateien beinhalten das Speicherabbild.