jmap kann aufgrund eines Socket-Fehlers nicht ausgeführt werden: Verwendung der Option „-F“ für erzwungene Anhänge
Beim Versuch, einen Heap-Dump zu erhalten Bei Verwendung von jmap kann die Fehlermeldung „Socket-Datei kann nicht geöffnet werden“ angezeigt werden, was darauf hindeutet, dass der Zielprozess nicht reagiert oder die HotSpot-VM nicht geladen wurde. Der Einsatz der Option „-F“ stellt eine mögliche Lösung zur Überwindung dieses Hindernisses dar.
jmap vs. jmap „-F“: Unterschiedliche Betriebsarten
jmap, Wenn es ohne das Flag „-F“ aufgerufen wird, nutzt es den Dynamic Attach Mechanism für die Kommunikation mit der Ziel-JVM. Dieser Mechanismus umfasst eine Abfolge von Schritten:
- Erstellen einer Datei (z. B. .attach_pid1234) im Arbeitsverzeichnis des Zielprozesses.
- Senden eines SIGQUIT-Signals an den Zielprozess, Aufforderung die JVM, um einen AttachListener-Thread zu initiieren.
- Einrichten eines UNIX-Domänen-Sockets für den Befehlsempfang von externen Tools.
- Überprüfen der Anmeldeinformationen des Verbindungs-Sockets (euid und egid) aus Sicherheitsgründen.
- Herstellen einer Verbindung zum Socket, Übertragen von Dumpheap-Befehlen und Zurückempfangen der Ausgabe vom AttachListener-Thread der JVM.
Vor- und Nachteile von Dynamic Attach:
-
Vorteile:
- Hochgeschwindigkeits-Heap-Dumps, die gemeinsam von der JVM ausgeführt werden.
- Kompatibilität zwischen verschiedenen Versionen von jmap und JVM.
-
Nachteile:
- Beschränkt auf denselben Benutzer (euid/egid) wie die Ziel-JVM.
jmap '-F'-Modus: Verwendung des HotSpot Serviceability Agent
Alternativ verwendet jmap '-F' den HotSpot Serviceability Agent und bietet so einen separaten Betriebsmodus. In diesem Szenario werden die folgenden Schritte ausgeführt:
- PTRACE_ATTACH wird auf der Ziel-JVM aufgerufen und der Prozess bedingungslos mit einem SIGSTOP-Signal angehalten.
- JVM-Speicher wird mit PTRACE_PEEKDATA, einem Prozess, gelesen Dies ist erheblich langsamer, da immer nur ein Wort gelesen werden muss.
- Interne JVM-Strukturen werden basierend auf der Version der Ziel-JVM rekonstruiert.
- Heap-Dump wird vom Tool generiert, bevor die Arbeit fortgesetzt wird Zielprozess.
Vorteile und Nachteile des „-F“-Modus:
-
Vorteile:
- Keine gezielte JVM-Kooperation erforderlich.
- Kann sogar auf blockierte Prozesse angewendet werden.
- Privilegierte Benutzer (z. B. Root) können Prozesse anderer Benutzer sichern.
-
Nachteile:
- Langsame Geschwindigkeit für große Heaps.
- Erfordert passende Versionen von jmap und der Ziel-JVM.
- Safepoint ist nicht garantiert , was möglicherweise zu Inkonsistenzen im Status der Ziel-JVM führt.
Das obige ist der detaillierte Inhalt vonWarum die Option „-F' mit jmap verwenden, wenn ein Socket-Fehler auftritt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!