第86章 デシジョンエンジン使用時のパフォーマンスチューニングに関する考慮点
以下の主要な概念または推奨のプラクティスを使用すると、デシジョンエンジンのパフォーマンス最適化に役立ちます。本セクションではこの概念についてまとめており、随時、他のドキュメントを相互参照して詳細を説明します。本セクションは、Red Hat Decision Manager の新しいリリースで、必要に応じて拡張または変更します。
- デシジョンエンジンの重要な更新を必要としない、ステートレス KIE セッションには順次モードを使用する
順次モードは、デシジョンエンジンにおける高度なルールベースの設定です。順次モードでは、デシジョンエンジンは、ワーキングメモリーでの変更に関係なく、デシジョンエンジンアジェンダにリスト化された順番でルールを一度評価します。その結果、ルールの実行は順次モードの方が速くなる可能性がありますが、重要な更新がルールに適用されない可能性があります。順次モードは、ステートレス KIE セッションのみに適用されます。
順次モードを有効にするには、システムプロパティー
drools.sequential
をtrue
に設定します。順次モードや、このモードの有効化に関する他のオプションの情報は、「Phreak における順次モード」 を参照してください。
- イベントリスナーを使用する場合は簡単な操作を使用する
イベントリスナーの数や、実行する操作の種類を制限します。デバッグロギングや設定プロパティーなどの簡単な操作にイベントリスナーを使用します。リスナーでネットワーク呼び出しなどの複雑な操作を行うと、ルールの実行が阻害される可能性があります。KIE セッションでの作業が完了した後には、セッションを消去できるように、アタッチされているイベントリスナーを以下の例のように削除します。
使用後に削除されるイベントリスナーの例
Listener listener = ...; StatelessKnowledgeSession ksession = createSession(); try { ksession.insert(fact); ksession.fireAllRules(); ... } finally { if (session != null) { ksession.detachListener(listener); ksession.dispose(); } }
Listener listener = ...; StatelessKnowledgeSession ksession = createSession(); try { ksession.insert(fact); ksession.fireAllRules(); ... } finally { if (session != null) { ksession.detachListener(listener); ksession.dispose(); } }
Copy to Clipboard Copied! 同梱のイベントリスナーとデシジョンエンジンでのデバッグロギングに関する情報は、84章デシジョンエンジンのイベントリスナーおよびデバッグロギング を参照してください。
- 実行可能なモデルビルドの
LambdaIntrospector
のキャッシュサイズ設定 -
実行可能なモデルビルドで使用される
LambdaIntrospector.methodFingerprintsMap
キャッシュのサイズを設定できます。キャッシュのデフォルトサイズは32
です。キャッシュサイズに小さい値を設定すると、メモリーの使用量が減少します。たとえば、システムプロパティーdrools.lambda.introspector.cache.size
を0
に設定すると、メモリーの使用量を最小限に抑えることができます。キャッシュサイズが小さくなると、ビルドパフォーマンスが低下する点に注意してください。 - 実行可能モデルでの lambda 外部化の使用
lambda 外部化を有効にして、実行時のメモリーの消費量を最適化します。この設定は、実行可能モデルで生成され使用される lambda を書き換えます。そのため、同じ lambda を全パターンおよび同じ制約で複数回再利用できます。Rete または Phreak がインスタンス化されると、実行可能なモデルをガベージコレクションにすることができます。
実行可能モデルの lambda 外部化を有効にするには、以下のプロパティーを追加します。
-Ddrools.externaliseCanonicalModelLambda=true
-Ddrools.externaliseCanonicalModelLambda=true
Copy to Clipboard Copied!