0

私たちは 64 ビットの Linux マシンを持っており、他のサービスに対して複数の HTTP 接続を行っています。Drools Guvnor Web サイト (わからない場合はルール エンジン) もその 1 つです。drools では、実行されるルールごとにナレッジ ベースを作成し、ナレッジ ベースの作成により、Guvnor Web サイトへの HTTP 接続が確立されます。

他のすべてのスレッドがブロックされ、CPU 使用率が最大 100% まで上昇し、OOM が発生します。15 ~ 20 分後にルールをコンパイルするための変更を加えることができます。しかし、誰かがすでに問題に直面している場合は、問題を確認したいと思います。

確認した"cat /proc/sys/kernel/threads-max"ところ、27000 スレッドと表示されています。これが原因でしょうか?

いくつか質問があります:

  1. キャパシティを超えていることはいつわかりますか?
  2. 内部で生成できるスレッドの数は?
  3. Drools で同様の問題を見た人はいますか? Guvnor Web サイトへの同時アクセスが基本的に問題の原因です。

ありがとう、

4

2 に答える 2

2

リクエストごとにナレッジ ベースを作成しているという仮定に基づいて回答しています。このナレッジ ベースの作成には、Guvnor からの最新のルール ソースのダウンロードが含まれます。間違っている場合は修正してください。

パッケージのビルド/コンパイルに時間がかかり、システムを占有していると思われます。

リクエストごとにパッケージをコンパイルする代わりに、ビルド前のパッケージを guvnor からダウンロードできます。ルールがあまり変わらない場合は、このパッケージをローカルにキャッシュすることもできます。唯一の制限は、guvnor とアプリケーションの両方で同じバージョンの drools を使用する必要があることです。

于 2012-10-30T13:42:36.847 に答える
1

「cat /proc/sys/kernel/threads-max」を確認したところ、27000 スレッドが表示されました。これが原因でしょうか?

その数は大きく見えますが、これらのスレッドの大部分が Java アプリに属しているかどうかはわかりません。これを確認するには、Java スレッド ダンプを作成します。スレッド ダンプには、各スレッドが使用した CPU 時間も表示されます。

キャパシティを超えていることはいつわかりますか?

CPU 使用率が 100% で、OOM エラーが発生しています。キャパシティを超えています :) 冗談はさておき、HTTP 接続キューを監視して、何が間違っているのかを判断する必要があります。あなたの投稿は、HTTP 接続をどのように処理しているかについては何も述べていません (おそらく、キューに支えられた何らかのプーリング メカニズムを介して?)。コンテナとプログラムがリクエストを無限にキューに入れ、ビッグバンでクラッシュするのを見てきました。次のグラフをプロットして、問題を切り分けてください

  1. 時間の経過に伴うブロック スレッドの数
  2. 各スレッドの所要時間
  3. スレッド プールあたりのスレッド数と、時間の経過に伴うスレッド数の増減 (プール サイズ)

内部で生成できるスレッドの数は?

この質問に答えられるのは負荷テストだけです。サーバーに負荷をかけ、60 ~ 70% の容量でサポートできる同時ユーザー数を決定します。この時点で内部的に生成されたスレッドの数に注意してください。これがピーク キャパシティです (予期しないトラフィックに対応できる余地があります)。

Drools で同様の問題を見た人はいますか? Guvnor Web サイトへの同時アクセスが基本的に問題を引き起こしています

この方法でよだれにアクセスしたことがないので、私はそこを助けることができません。ごめん。

于 2012-10-30T11:55:22.453 に答える