2012-04-23 19 views
2

私は多くのデータを購読し、このデータをさまざまな方法で表示するJava Swingアプリケーションを持っています。重い負荷のもとで、私はJREが "Java(TM)Platform SEバイナリが動作を停止しました"というメッセージで動作を停止することに遭遇しました。これは明らかに私のアプリケーションをシャットダウンし、私はそれを再起動する必要があります。私は私のコードや私が動作することができますが、JREのアップグレード/再インストールとウイルススキャンの実行以外の有用な情報はほとんど見つけ出していないので、この問題のトラブルシューティングの方法をGoogleに試みました。私はこれらの対策の両方を行い、サーバーを再起動しましたが、問題は依然として続きます。私はJava VisualVM(以下のダンプ参照)でプロセスを監視しようとしましたが、私はこのツールの専門家でなく、何を探すべきか分からないかもしれません。私が行った観察は、「クラッシュ」がガベージコレクションと一致するように見えるということです。Java SEバイナリクラッシュ

問題は非常に再現しやすく、アプリケーションを実行して約10分後に発生します。私は特定のjvmパラメータでアプリケーションを実行しません。 Javaのバージョンは1.6.0_31(アップグレード前は_25だった)で、Windows 7 64ビットで動作します。

VisualVMの下の図では、Javaバイナリが動作を停止しましたが、これはGC実行と同時に発生します。 Dump from Java VisualVM

私が問題のトラブルシューティングや改善を行うための助けやアイデアは大変ありがたいです。ありがとう。

+0

任意のJNI拡張機能を使用していますか? –

+0

GCが正常に実行されていないようです。 – kosa

+0

@DmitryOvsyanko No. – hgus1294

答えて

2

ガベージコレクションは、発生時にVMのアプリケーションスレッドを一時停止します。これは競合状態をどこかに露呈させる可能性があります。チェックする

+0

OK。どのように私はそれを解決することができますか? – hgus1294

+0

EDT違反に関する[* ThreadCheckingRepaintManager *](http://weblogs.java.net/blog/alexfromsun/archive/2006/02/debugging_swing.html)も参照してください。 – trashgod

3

3つのこと:

  1. あなたはどこにでもfinalize()メソッドを実装している場合は、必ずそれが直接的または間接的に任意のオブジェクトをロックしない作ります。これは、GCと相関する致命的デッドロックを引き起こす可能性があります。

  2. ネイティブコードを取得している場合、コードがグローバル参照を正しく使用していないと、デッドロックや気まぐれなメモリ破損など、奇妙なことが起こる可能性があります。

  3. 最後に、GCは「ポットを攪拌する」ことがあり、アプリケーション内に別の方法で存在するバニラデッドロックを公開することがあります。同期プロトコルを確認してください。

+0

そのメッセージです - バイナリは動作を停止しました - 常にデッドロックですか? –

+1

デッドロックか、JVM、Windows、またはネイティブライブラリのバグです。彼は2つの異なるJavaパッチレベルを試したので、JVMのバグはあまりありません。また、コメントごとにネイティブコードを使用していません。 Windowsのバグ(つまり、JVMによって使用されるいくつかのWindows DLLのバグ)か、デッドロックのいずれかです。 –

+0

ありがとうございます。彼らが潜在的な候補者かもしれないので、私は1 + 3にチェックインします。問題の負荷でデバッグモードでアプリケーションを実行するのが面倒で難しいため、どこが壊れているのかについてもう少し詳しく知りたいだけです。 – hgus1294

関連する問題