問題
クラウドのテスト環境でWebSphere 9コンテナを起動すると正しくスタートしないことがしばしばあります。HTTPリクエストに応答するコンポーネントが初期化されず、WebSphereインスタンスはHTTPリクエストに応答しません。
原因
HTTPサービスの初期化が完了したことを示す以下のメッセージがWebSphereのログファイルに記録されない場合、この問題が発生している事が考えられます:
com.ibm.ws.webcontainer.WSWebContainer initialize SRVE0161I: IBM WebSphere Application Server - Web Container. Copyright IBM Corp. 1998-2015
この「起動失敗」と関連するようなエラーはWebSphereによって報告されず、単にHTTPリクエストに応答していないだけです。
WebSphere 9をスタートアップするタイミングに特定の条件が揃うと競合状態が発生し、それによってこの問題が発生します。弊社のクラウドテスト環境では、WebSphere 9のコンテナを起動する際、およそ20回に1回の割合でこの問題が発生していました。弊社のパイプラインでほぼ同じ回数WebSphere 8.5のコンテナを起動しましたが、WebSphere 8.5ではこの問題は発生しませんでした。
解決方法
サーバのコンポーネントの初期化のために用いられているWebSphereのスレッドプールの設定を調整することで、弊社ではパイプラインで発生したこの問題を解決しました。
WebSphereスタートアップ時のスレッドに関する並行設定をデフォルトの3スレッドプールから変更することで、この問題が解消する事が分かりました。以下は問題を解消する変更例です:
- スレッドプールのスレッド数を10にする
- スレッドプールのスレッド数を1にする
- 3スレッドを初期値とし、そのスレッドを動的にスレッド数が増加するスレッドプールに割り当てる
問題が発生する特定のメカニズムは判明していませんが、これまでに発見した知見を公開する事でこの問題が解決することを期待します。
もし何かご質問などがあれば、support@contrastsecurity.com にお問い合わせください。