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!
Stellungnahme:Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn