ワークフローを実装するために、Servicemix 3.3.2 内で apache ode 1.3.3 を使用します。負荷が増加すると (つまり、単位時間あたりのフロー呼び出しの数)、ode はフリーズし、新しい要求の処理を停止してハングします。通常、「データ」フォルダーのクリーンアップ後に Servicemix を再起動することで問題を解決します。
最初は、これはスレッドの問題 (ode が使用するスレッドの不足) だと思っていました。ode-jbi.properties の「スレッド プール サイズ」を増やした後、この問題は解決されました。それでも、重い負荷がかかると、ode はハングアップし続けます。
追加のログを使用してさらに調査すると、負荷が高い状態では、ode が DB への十分な接続を取得できず ( NoManagedConnectionException )、その状態を維持できないことが明らかになりました。私たちの ode 永続化構成は INTERNAL ( ode-jbi.db.mode=INTERNAL を参照) であり、接続プールはコンテナー/ランタイム自体によって維持されます。それを EXTERNAL jndi データソース構成 (接続プールのパラメーターを構成できる場所) に移行する努力は、まだ成果を上げていません (各段階で発生し続ける無数のエラーを理解できなかったおかげです :( :) )
そこで、プロセスの「インメモリ実行」という他の利用可能なオプションを試しました。これは「テスト セットアップ」で正常に機能し、シミュレートされた負荷の下で「NoManageConnectionException」をスローしなくなりました。
しかし、これを PROD に移行することについていくつか懸念があります。インメモリ実行と「永続化」実行の違いは何ですか? これにより、どれだけ多くのメモリが消費されますか? これにより、'OutOfMemoryOutages' が発生して、PROD セットアップの信頼性に影響しますか?
デプロイされた約 10 の bpel プロセスがあります。そして、負荷(リクエスト数)...通常は最小限ですが、時々急増します(ここで、プロセスを非常に高速に実行する必要がありますが、OutOfMemory PRODの停止を引き起こすことなく...うまくいけば:D :) :P )
これに関するあなたの考え、提案、アドバイスが必要です。
前もってありがとう、アルン