WSO2 BPS 3.6.0 を使用すると、時折 OutOfMemoryError が発生し、サーバーが停止しました。ヒープ分析の後、次のことが疑われます。
ビジネスアイテムの状態が変わらなくなるまで、(Web サービスを使用して) 定期的に情報を検索するプロセスがいくつかあります。しばらくすると、一部のプロセス インスタンスに多くのイベント (数千、約 10k) が発生する場合があります。Carbon コンソールでインスタンス情報を表示しようとすると、ロードされたデータ (インスタンス アクティビティ) によって OutOfMemoryError が発生し、サーバー (6GB RAM を搭載) がドロップされる可能性があります:(
回避策として、DB ルックアップを使用します。
select ode_event.event_id, ode_event.detail, ode_event.tstamp, ode_event.type,
ode_event.instance_id, ode_event.process_id,
ode_scope.scope_name
from ode_event, ode_scope where ode_event.instance_id=18204 and
(ode_event.scope_id = ode_scope.scope_id);
ただし、すべてのビジネス ユーザー (プロセス オーナーを含む) がデータベースに直接アクセスできるようにすることは非常に悪いことだと考えています。
アクティビティを表示する (より良い) 方法/クエリはありますか? 改善/機能を配置する (ページ付けされたアクティビティをロードする) 正しい github プロジェクトはどれですか?
編集:
ソース コードを見ると、この「動作」は Apache-ODE 実装から継承されています (スコープとイベントのリスト全体をメモリに積極的にロードします)。