web-dev-qa-db-ja.com

WebLogicスタックスレッド保護

デフォルトでは、WebLogicは15分(600秒)後にスタックスレッドを強制終了します。これはStuckThreadMaxTimeパラメータによって制御されます。しかし、「スタックネス」がどのように正確に定義されているかについての詳細はわかりません。具体的には:

  • 15分のカウントダウンが始まるポイントは何ですか。リクエスト処理開始?最後のwait()のようなメソッド?他に何かありますか?
  • これはリクエスト処理スレッドにのみ適用されますか、それともすべてのスレッドに適用されますか?つまりリクエスト処理スレッドは、長いタスクのワーカースレッドを生成することで、この保護を「回避」できますか?特に、15分のカウントダウンなしでそのようなワーカーに応答書き込みを委任できますか?

私のユースケースは、許可システムを介した巨大なファイルのダウンロードです。ユーザーは認証され、ファイルを表示するためのアクセス許可を持っている必要があるため、これを単純なHTTPサーバーに任せることはできません(または少なくとも方法がわかりません)。 Apache。また、ファイルは巨大になる可能性があるため、ダウンロードには(少なくとも理論的には)15分以上かかる可能性があります。

21
doublep

Weblogicは[〜#〜] not [〜#〜]StuckThreadMaxTimeの後にスタックしたスレッドを強制終了します。それはできません。メッセージはステータス情報にすぎないため、スレッドが10分を超えたことをユーザー(つまり管理者)が認識します(600秒= 10分、15分ではありません)

これは構成可能な値です。

タイマーは、スレッドがサーバー内で要求の処理を開始すると開始します。スレッドは強制終了されませんが、操作が終了するまで実際に処理を続行します。したがって、あなたの場合、スレッドが強制終了されることを心配する必要はありません。スレッドがかかった時間を通知しただけです。このユースケースではこれを認識しています。

これは、AFAIKのすべてのスレッドに適用されます。生成されたスレッドも同じルールで動作します。

IMHO、Weblogic(または任意のアプリサーバー)は、大きなファイルを保存して提供する場所ではありません。これは、理想的にはWebサーバー層を対象としています。ファイルダウンロードサーブレットを実行できるSunOneを使用します。あなたの場合、これを最適化するために、Apacheと一緒にTomcatが必要になります。

22
JoseK

WLS10 WorkManagerのドキュメントは、実際のヘッドスクラッチを引き起こす可能性があります。 weblogicでwebappのWorkManagerを定義する方法のステップバイステップの例については、 http://blogs.Oracle.com/jamesbayer/2010/01/work_manager_leash_for_slow_js.html を参照してください。 xmlを実行し、それを使用する特定のサーブレットを割り当てます。

その例に加えて、<ignore-stuck-threads>true</ignore-stuck-threads><work-manager>定義に追加できます。これにより、shouldそのWorkManagerで動作するスレッドがカウントされなくなります。障害が発生したサーバーの状態に対して。

7
dave thompson