2016-07-22 10 views
0

Ich bin mit dem Befehl:Was ist die Ursache von Kann Socket-Datei nicht öffnen: Prozess reagiert nicht beim Dumping der JVM?

jstack 1234 > threadDump.tdump 

Auf einer PID eines Java-Prozess. Ich erhalte die folgende Meldung:

Unable Socket-Datei zu öffnen: Zielprozess nicht reagiert oder HotSpot VM nicht Die Option -F geladen kann verwendet werden, wenn der Zielprozess nicht

antwortet ich nicht bin Ich frage nur, wie ich lösen soll, aber ich möchte verstehen, warum ich diese Botschaft bekomme, da ich sie nie in der Vergangenheit bekommen habe.

Ich bin auf einem Unix Red Hat.

Antwort

1

So funktioniert dynamisches Anhängen: tool (jstack in Ihrem Fall) sendet Signal (-3) an Ziel vm. Bevor das Signal gesendet wird, erstellt das Tool die Datei attach. Wenn die VM ein Signal empfängt, sucht sie nach dieser Datei. Wenn eine Datei vorhanden ist, wird ein Unix-Socket erstellt. In der Zwischenzeit wartet das Tool auf die Erstellung dieses Sockets. Und wenn diese Datei nicht existiert, wird diese Fehlermeldung gedruckt. Sie finden diesen Code (Werkzeugteil) in sun.tools.attach.LinuxVirtualMachine. Diese Datei aus der Datei jdk_home/lib/tools.jar. Code für Hotspot-Teil signal_thread_entry von os.cpp, AttachListener::init.

Ich denke, dass aus irgendeinem Grund vm Socket-Datei während 5 Sekunden nicht erstellen kann (es ist Standard-Timeout, das über -Dsun.tools.attach.attachTimeout Eigenschaft geändert werden kann). Oder vielleicht führen Sie vm mit -XX: + ReduceSignalUsage Flag? In diesem Fall entfernen Sie dieses Flag von Ihrer Befehlszeile