2

多くのデータをサブスクライブし、このデータをさまざまな方法で表示する Java swing アプリケーションがあります。負荷が高い場合、JRE が「Java(TM) Platform SE バイナリが動作を停止しました」というメッセージで単に動作を停止することに遭遇しました。これにより、明らかにアプリケーションがシャットダウンされ、再起動する必要があります。この問題のトラブルシューティング方法をグーグルで調べてみましたが、コード内にスタック トレースが表示されなかったり、操作できるものは何もありませんでしたが、JRE のアップグレード/再インストールやウイルス スキャンの実行以外に役立つ情報はほとんど見つかりませんでした。これらの両方の対策を実行し、サーバーを再起動しましたが、問題は解決しません。Java VisualVM を使用してプロセスを監視しようとしましたが (以下のダンプを参照)、このツールの専門家ではないため、何を探すべきかわからない場合があります。私が行った観察は、「クラッシュ」するということです

この問題は非常に簡単に再現でき、アプリケーションを実行してから約 10 分後に発生します。特定の jvm パラメータを使用してアプリケーションを実行しません。Java のバージョンは 1.6.0_31 (アップグレード前は _25 でした) で、Windows 7 64 ビットで実行しています。

下の VisualVM の写真では、Java バイナリが動作を停止したばかりで、GC の実行と一致しているように見えます。 Java VisualVM からのダンプ

問題をトラブルシューティングまたは修正できるように、ヘルプやアイデアをいただければ幸いです。ありがとう。

4

2 に答える 2

3

3 つの確認事項:

  1. メソッドをどこかに実装した場合はfinalize()、直接的または間接的にオブジェクトをロックしないようにしてください。これにより、GC に関連する壊滅的なデッドロックが発生する可能性があります。

  2. ネイティブ コードを使用している場合、コードがグローバル参照を正しく使用していない場合、デッドロックや異常なメモリ破損など、さまざまな異常が発生する可能性があり、これも GC アクティビティと相関します。

  3. 最後に、GC は単に「鍋をかき混ぜ」、アプリケーションに存在する通常のデッドロックを公開している可能性があります。同期プロトコルを確認してください。

于 2012-04-23T18:03:23.563 に答える
2

ガベージ コレクションが発生している間、VM のアプリケーション スレッドを一時停止します。これにより、どこかで競合状態が発生している可能性があります。

于 2012-04-23T18:00:15.593 に答える