/ / System.exit scheint auf OpenJDK 7 / FreeBSD - java, freebsd, openjdk - sehr lange zu dauern

System.exit scheint auf OpenJDK 7 / FreeBSD - java, freebsd, openjdk lange zu dauern

Ich habe ein Problem mit der Leistung eines laufenden Java-Subprozesses unter Java unter FreeBSD 9.0-RELEASE i386.

Die Ausführung von System.exit () dauert für dieses Programm etwa 2,6 Sekunden. Und ich kann nicht herausfinden, warum. Es dauert 0,025 Sekunden unter Windows. Aktualisieren: Es läuft auch viel schneller auf OpenJDK 6.

Wenn Sie OpenJDK7 unter ktrace ausführen, zeigt sich beim Herunterfahren eine große Sequenz der folgenden:

26795 java 1.808597 anrufen _umtx_op (0x2831e068,0xf, 0,0,0xbf7a9870)
26795 java 1.838640 RET _umtx_op -1 errno 60 Zeitüberschreitung beim Vorgang

Wie kann ich herausfinden, was das Programm versucht?hier zu tun Gibt es eine einfache Problemumgehung oder eine Möglichkeit, dies zu beheben? Es sieht so aus, als ob dieses Problem auf FreeBSD-Betriebssystemen ziemlich häufig auftaucht, was durch die Websuche festgestellt wird, aber ich analysiere immer noch, was ich finde (und versuche, libthr usw. zu lernen).

Es sind keine anderen Shutdown-Hooks hinzugefügtals einen, um einen Zeitstempel zu drucken, keine vom System hinzugefügten Abschalthaken, keine zu löschenden Dateien und kein runFinalizersOnExit Das System scheint die Zeit in der nativen Methode java.lang.Shutdown.halt0 zu verbringen, die ich immer noch analysieren möchte.

Antworten:

0 für die Antwort № 1

Der Operand 0xf ist UMTX_OP_WAKE_PRIVATE (siehe /usr/src/sys/sys/umtx.h). Dies versucht, einen Kernel-Thread aufzuwecken, und schlägt fehl.

Nun zu Warum es kann nicht gesagt werden. Es könnte ein Deadlock in Java sein.