Ich brauche eine Möglichkeit, einen Heap-Dump aus der Anwendung anzufordern.Anforderung Java-Heap-Dump (Kern-Dump) aus der Anwendung
Begründung: Wenn ich auf einen bestimmten Fehlerzustand stoße, möchte ich einen Heapspeicher erstellen, damit ich sehen kann, was sich im Speicher abspielt.
Aber ich möchte dies automatisieren (Zum Beispiel, wenn ich feststelle, dass eine bestimmte Bedingung aufgetreten ist. Oder wenn ein Watchdog seine Pings nicht mehr bekommt. Wenn ein Test fehlschlägt). Daher brauche ich eine Möglichkeit, den Heap aus der Anwendung selbst zu entfernen. Ich kann es nicht mit den MX Beans Sachen finden. Obwohl die MX-Beans mit Monitor- und "ownable synchronizer" -Info, Deadlock- und Contention-Informationen sehr schöne Stack-Traces geben können, finde ich keinen Weg, einen Heap-Dump anzufordern. Gibt es einen solchen Weg? Oder auf irgendeine indirekte Weise, zum Beispiel, wie machen es diese JVisualVM-Dinge? Und man kann der JVM sagen, dass sie einen Core auf OutOfMemoryExceptions ablegen soll.
Super, genau das, was ich gesucht habe, Danke! Ich finde es erstaunlich, dass ich diesen Blogeintrag während meines Googelns nicht gefunden habe. Unter sun.management gibt es offensichtlich viel Spaß! – stolsvik
Noch ein Kommentar (zurück zu den Ideen im OP): Von Ihrem Link "Dump Heap auf OutOfMemoryError" kann ich lesen: "Der integrierte Heap-Dumper kann auch verwendet werden, um einen Snapshot des Heap bei zu anderen Zeiten. Dies geschieht mithilfe des jmap-Befehlszeilendienstprogramms oder der jconsole-Überwachungs- und Verwaltungskonsole. ". Diese Tools verwenden dann wahrscheinlich den proprietären MXBean, auf den sich der zweite Link bezieht? Ich finde es seltsam, dass die Standard-MX-Beans diese Methode dumpHeap (fileName, live) nicht haben. – stolsvik
Art von nervig, ja, aber ich würde vermuten, dass, wenn es eine Standardfunktionalität wäre, das Heap-Dump-Format auch standardisiert werden sollte. Zumindest würde ich mir vorstellen, dass das eine Menge Arbeit wäre, und es könnte möglicherweise die Freiheit einschränken, die Anbieter in ihren VM-Implementierungen haben. – gustafc