0

バッキング Bean の 1 つである weblogic10.3.4 に JSF2.1 アプリをデプロイしました。参照 ArrayList を List インスタンスに割り当てようとすると、weblogic はアプリケーションへのピーク トラフィック時に Struck スレッドになります。

java.util.ArrayList.indexOf(ArrayList.java:210)
java.util.ArrayList.contains(ArrayList.java:199)

誰もがこの問題に直面したことがあります。

4

1 に答える 1

1

あなたが何を意味するのか完全に明確ではないので、「スタックしたスレッド」を意味していると仮定し、スレッドはその時点で継続的に実行されているという意味でスタックしています。

3つのもっともらしい原因を考えることができます。

  • 検索対象のオブジェクトには、equals(Object)状況によっては無限ループに入るバグのあるメソッドがあります。

  • 2 つ (またはそれ以上) のスレッドがほぼ同時にリストにアクセスおよび/または更新しており、適切に同期していません。適切に同期しないと、スレッドがデータ構造の一貫性のないビューを認識し、不可能に見える方法で動作するリスクがあります。

  • 1 つのスレッドが 2 つの異なるリストを持っているという (誤った) 信念で、リストの読み取りと更新の両方を行う病理学的状況をどういうわけかセットアップしました。

サーバーの負荷が高い場合、そのような「ハイゼンバグ」が発生する可能性が高くなるため、これは 2 番目の問題であると思います。


最後に、スレッドが無限ループに入っていない可能性がありますが、何かを実行するのに時間がかかっているだけです。また、ループに他のコードが含まれている可能性もありますが、いつ見てもその時点です。

于 2012-07-05T16:05:56.723 に答える