Unser Server hängt wegen eines SIGSEGV-Fehlers.
Ein schwerwiegender Fehler wurde von der Java Runtime Environment erkannt:
%Vor%Ich bin neugierig zu wissen, was die Ursache dafür sein könnte?
Jede Hilfe wird sehr geschätzt .. Danke ..
Signalbeschreibung
SIGSEGV, SIGBUS, SIGFPE, SIGPIPE, SIGILL - Wird in der Implementierung für die implizite Nullprüfung usw. verwendet.
SIGQUIT Thread-Dump-Unterstützung - Zum Ablegen von Java-Stack-Traces im Standardfehler-Stream. (Optional.)
SIGTERM, SIGINT, SIGHUP - Wird verwendet, um den Shutdown-Hook-Mechanismus (java.lang.Runtime.addShutdownHook) zu unterstützen, wenn die VM abnormal beendet wird. (Optional.)
SIGUSR1 - Wird in der Implementierung der Methode java.lang.Thread.interrupt verwendet. (Konfigurierbar.) Wird nicht mit Solaris 10 OS verwendet. Reserviert unter Linux. SIGUSR2 Wird intern verwendet. (Konfigurierbar.) Wird nicht mit Solaris 10 OS verwendet. SIGABRT Die HotSpot VM behandelt dieses Signal nicht. Stattdessen ruft es die Abbruchfunktion nach der fatalen Fehlerbehandlung auf. Wenn eine Anwendung dieses Signal verwendet, sollte sie den Prozess beenden, um die erwartete Semantik beizubehalten.
Das fatale Fehlerprotokoll zeigt an, dass der Absturz in einer systemeigenen Bibliothek aufgetreten ist. Möglicherweise liegt ein Fehler im systemeigenen Code oder im JNI-Bibliothekscode vor. Der Absturz könnte natürlich durch etwas anderes verursacht werden, aber die Analyse der Bibliothek und aller Kerndateien oder Absturzspeicherauszüge ist ein guter Ausgangspunkt.
In diesem Fall ist ein SIGSEGV mit einem Thread aufgetreten, der in der Bibliothek libdtagentcore.so ausgeführt wird. In einigen Fällen manifestiert sich ein Fehler in einer nativen Bibliothek als Absturz im Java-VM-Code. Stellen Sie sich den folgenden Absturz vor, bei dem ein JavaThread im Zustand _thread_in_vm fehlschlägt (was bedeutet, dass Java VM im Code ausgeführt wird)
Es gibt eine eingängige Situation im JNI-Code: wenn ein solcher Code das SIGSEGV-Signal z.B. weil es alle Signale blockiert (ziemlich gewöhnlicher Ansatz in C-Code mit Threads, wie sichergestellt werden kann, dass nur Hauptthread Signale verarbeitet) AND ruft 'zurück' Java VM (alias Callback) auf, dann kann es ziemlich zufällig sein SIGSEGV-ausgelöstes Abbrechen des Prozesses.
Und es ist praktisch nichts falsch - SIGSEGV wird tatsächlich von Java VM ausgelöst, um bestimmte Bedingungen im Speicher zu erkennen (es fungiert als Speicherbarriere ... usw.) und erwartet, dass ein solches Signal von Java VM gehandhabt wird. Leider, wenn SIGSEGV blockiert ist, wird 'Standard' SIGSEGV Reaktion ausgelöst = & gt; VM-Prozess stürzt ab.
Es sagt Ihnen, dass ein Fehler in Code aufgetreten ist, der von libdtagentcore.so
geladen wurde. Genauer gesagt geschah dies in der Funktion restrict
und im Offset 0x506f6
. Der erste erwähnte Offset ( 0xb7aaa
) wird innerhalb der Bibliothek selbst ausgeglichen. Wenn es mit Debugging-Symbolen (-g) erstellt wurde, können Sie den Code betrachten, der die Ausnahme verursacht hat, unter Linux etwas wie folgt:
Falls dies von jemandem unter Windows gelesen wird, lesen Sie Ссылка
Weitere Einzelheiten finden Sie in Zypern