2017-08-07 28 views
0

javaアプリケーションには、同時実行タスクをサポートする独自のスレッドプールがあり、合計500スレッドが割り当てられているとします。 Tomcatはまた、コネクタ構成を介して全体で1000スレッドをサポートするように構成されています。アプリケーションレベルのスレッドプールとtomcat

1000スレッドのコネクタ設定は、500スレッドアプリケーションスレッドプールのスーパーセットとして機能するのか、またはこれら2つの独立したスレッドプールですか?これは、合計1000個のスレッドがデプロイされたアプリケーションに割り当てられていることを意味しますか、それとも500 + 1000 = 1500ですか?

答えて

0

最大1000のスレッドを持つようにコネクタを構成すると、コネクタの最大スレッド数は1000になります。同じVM内でアクティブなスレッドの数はチェックしません。

カスタムスレッドプールの割り当て方法は述べていませんが、許容スレッドの数とシステム内で何が起こっているのかを関連付けるスレッドプールは決して見つかっていませんのメモリ)。

あなたの答えの理由は1500です。

また、簡単に知ることができます:1000スレッドで処理するはずの負荷の下にシステムを置き、スレッドダンプを引き起こします。 1000スレッドのコネクターを構成するときは、これが処理するボリュームに適したサイズであることを測定し、その負荷を容易に生成できるロード・テストがあることを意味するため、これを行うことになります。

これらのスレッドをすべて生成するのではなく、java.util.concurrent.Executorとその親類を調べることをおすすめします。

+0

私は、java.util.concurrentライブラリを使用してカスタムスレッドプールを作成し、使用しています。 –

0

Javaのバックグラウンドスレッドプールは、実際にはベースライブラリの一部で再利用されます。たとえば、並列化されたストリームを実行する場合、まったく同じスレッドプールがすべてのストリームに使用されます。

Apacheソフトウェアは、私以外の理由で基本Javaライブラリを複製する傾向があります。つまり、Tomcatは基本ライブラリスレッドプールと互換性がない、または再利用されない独自のバージョンのスレッドプールを使用します。

500個のJavaベースライブラリスレッドプールスレッドと1000個のTomcatスレッドを実行すると、1500個のスレッドが実行されます。またスレッドの切り替えにコストがかかりすぎることを考慮すると、アクティブなスレッドが非常に多くなると、システムは実際のコードを実行するのではなく、スレッド処理にかなりの時間を費やします。どの程度完全に内部と負荷に依存しているのですか、あなたが説明した状況についての推測された推測は、スレッド切り替えのために無駄に費やされるCPU時間の約5〜15%です。

関連する問題