JavaWebサーバー用のスレッドプールの構成
1. 序章
このチュートリアルでは、Apache Tomcat、Glassfish Server、OracleWeblogicなどのJavaWebアプリケーションサーバーのスレッドプール構成について説明します。
2. サーバースレッドプール
サーバースレッドプールは、デプロイされたアプリケーションのWebアプリケーションサーバーによって使用および管理されます。これらのスレッドプールは、Webコンテナまたはサーブレットの外部に存在するため、同じコンテキスト境界の影響を受けません。
アプリケーションスレッドとは異なり、サーバースレッドは、デプロイされたアプリケーションが停止した後でも存在します。
3. Apache Tomcat
まず、server.xmlのExecutor構成クラスを介してTomcatのサーバースレッドプールを構成できます。
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="150" minSpareThreads="25"/>
minSpareThreads は、起動時を含め、プールが最小になります。 maxThreads は、サーバーがリクエストのキューイングを開始する前にプールがになる最大値です。
Tomcatのデフォルトでは、これらはそれぞれ25と200になっています。 この構成では、スレッドプールをデフォルトよりも少し小さくしました。
3.1. 埋め込まれたTomcat
同様に、Spring Boot用の埋め込みTomcatサーバーを変更して、アプリケーションプロパティを設定することでスレッドプールを構成できます。
server.tomcat.max-threads=250
Boot 2.3以降、プロパティは次のように変更されました。
server.tomcat.threads.max=250
4. Glassfish
次に、Glassfishサーバーを更新しましょう。
Glassfishは、TomcatのXML構成ファイルとは対照的にadminコマンドを使用します。
create-threadpool
に追加できます create-threadpool フラグ maxthreadpoolsize と
--maxthreadpoolsize 250 --minthreadpoolsize 25
プールに戻る前にスレッドがアイドル状態になる時間を指定することもできます。
--idletimeout=2
そして、最後にスレッドプールの名前を指定します。
asadmin> create-threadpool --maxthreadpoolsize 250 --minthreadpoolsize 25 --idletimeout=2 threadpool-1
5. Weblogic
Oracle Weblogicを使用すると、WorkManagerを使用してセルフチューニングスレッドプールを変更できます。
スレッドキューと同様に、WorkManagerはスレッドプールをキューとして管理します。 ただし、WorkManagerは、リアルタイムスループットに基づいて動的スレッドを追加します。 Weblogicは、スループットの分析を定期的に実行して、スレッドの使用率を最適化します。
これは私たちにとってどういう意味ですか? これは、スレッドプールを変更する場合でも、Webサーバーが最終的に新しいスレッドを生成するかどうかを決定することを意味します。
Weblogic管理コンソールでスレッドプールを構成できます。
セルフチューニングの最小スレッドプールサイズとセルフチューニングスレッドの最大プールサイズの値を更新すると、WorkManagerの最小境界と最大境界が設定されます。
スタックスレッド最大時間およびスタックスレッドタイマー間隔の値に注意してください。 これらは、WorkManagerがスタックスレッドを分類するのに役立ちます。
実行時間の長いプロセスにより、スタックしたスレッドが蓄積する場合があります。 WorkManagerは、補正するためにスレッドプールから新しいスレッドを生成します。 これらの値を更新すると、プロセスが終了するまでの時間が長くなる可能性があります。
スレッドのスタックはコードの問題を示している可能性があるため、回避策を使用するのではなく、根本的な原因に対処することが常に最善です。
6. 結論
このクイック記事では、アプリケーションサーバーのスレッドプールを構成する複数の方法について説明しました。
アプリケーションサーバーがさまざまなスレッドプールを管理する方法には違いがありますが、それらは同様の概念を使用して構成されています。
最後に、Webサーバーの構成値を変更することは、パフォーマンスの低いコードやアプリケーションの設計が悪い場合の適切な修正ではないことを忘れないでください。