1

FreeBSD 9.0-RELEASE i386 で実行されている Java の下で実行されている Java サブプロセスのパフォーマンスに問題があります。

このプログラムの System.exit() は、実行に約 2.6 秒かかります。そして、私はその理由を理解できません。Windows では 0.025 秒かかります。更新: OpenJDK 6 での実行速度も大幅に向上しています。

ktrace の下で OpenJDK7 を実行すると、シャットダウン中に次の巨大なシーケンスが表示されます。

26795 Java 1.808597 CALL _umtx_op(0x2831e068,0xf,0,0,0xbf7a9870)
26795 Java 1.838640 RET _umtx_op -1 errno 60 操作がタイムアウトしました

ここでプログラムが何をしようとしているのか、どうすればわかりますか? または、これを修正する簡単な回避策または方法はありますか? この問題は、Web 検索で判断すると、FreeBSD の OS レベルでかなり頻繁に発生するようですが、私はまだ見つけたものを分析しています (そして libthr などを学ぼうとしています)。

タイムスタンプを出力する以外に、私が追加したシャットダウン フックはなく、システムによって追加されたシャットダウン フックも、削除するファイルも、runFinalizersOnExit もありません。システムはネイティブ メソッド java.lang.Shutdown.halt0 で時間を費やしているようです。これはまだ分析中です。

4

1 に答える 1

0

オペランド 0xf は UMTX_OP_WAKE_PRIVATE です ( を参照/usr/src/sys/sys/umtx.h)。これはカーネル スレッドを起動しようとしますが、失敗します。

なぜそれが失敗するのかについては、今では言うことができません。Java のデッドロックである可能性があります。

于 2013-03-20T00:04:46.383 に答える