問題
- スレッド ダンプを分析すると、次のようなスタック トレースを含む BLOCKED ステータスの複数のスレッドがあります。
"http-nio-8080-exec-129" Id=325 BLOCKED on com.liferay.portal.init.servlet.filter.internal.InitFilter@4334dad owned by "http-nio-8080-exec-130" Id=326
at com.liferay.portal.init.servlet.filter.internal.InitFilter.processFilter(InitFilter.java:51)
- blocked on com.liferay.portal.init.servlet.filter.internal.InitFilter@4334dad
at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:49)
...
Environment
- Liferay DXP 7.0+
解決策
- サーバーの起動時に、アプリケーション サーバーと DXP Web アプリケーションの起動が完了していても、最初のリクエストの受信時に遅延初期化されるリソースがいくつかあります。 これにより、この最初のリクエストが応答される前に一度に多くのリクエストが受信された場合、これらのリソースがまだ初期化されていないため、ログにエラーが表示されていました。
これらのエラーの生成を回避するために、initFilter が開発されました。これは、最初の要求のみを通過させ (このリソースの初期化をトリガーします)、この最初の要求が応答されるまで残りの要求をブロックします。
このため、外部トラフィックがノードに到達する前に、最初にウォームアップ リクエストを送信し、次にノードを外部トラフィックに公開することを常にお勧めします。 このようにして、ノードの起動直後に多数のリクエストが同時に到着した場合に、これらのブロックが回避されます。