10

JRubyonRailsアプリケーションを実行しています。私のログにはこれがランダムにたくさん見られます:

The max pool size is currently 5; consider increasing it

これに対処するために、構成の最大プールサイズを増やすことができることを理解しています。私が対処しようとしている問題は、最適な数がどうあるべきかを理解することです。接続の競合の問題を回避しようとしています。この数値を明らかに大きなものに設定しても機能しません。

アプリの最適なプールサイズ設定を知るために従うべき一般的なプロトコルはありますか?

4

1 に答える 1

13

ここから、

スレッドプールの最適なサイズは、使用可能なプロセッサの数とワークキュー上のタスクの性質によって異なります。完全にコンピューティングバウンドタスクを保持するワークキュー用のNプロセッサシステムでは、通常、NまたはN+1スレッドのスレッドプールで最大のCPU使用率を達成します。

I / Oの完了を待機する可能性のあるタスク(たとえば、ソケットからHTTP要求を読み取るタスク)の場合、すべてのスレッドが機能するわけではないため、使用可能なプロセッサーの数を超えてプールサイズを増やす必要があります。常に。プロファイリングを使用すると、一般的な要求の待機時間(WT)とサービス時間(ST)の比率を見積もることができます。この比率をWT/STと呼ぶ場合、Nプロセッサシステムの場合、プロセッサを完全に使用し続けるために、約N *(1 + WT / ST)スレッドが必要になります。

スレッドプールサイズを調整する際の考慮事項は、プロセッサの使用率だけではありません。スレッドプールが大きくなると、スケジューラ、使用可能なメモリ、またはソケットの数、開いているファイルハンドル、データベース接続などの他のシステムリソースの制限に遭遇する可能性があります。

したがって、スレッドがほとんどCPUにバインドされている場合は、アプリケーションのプロファイルを作成し、スレッドプールのサイズをコア数またはコア数+1に設定します。データベース呼び出しが完了するのを待つことにほとんどの時間を費やしている場合は、かなり多数のスレッドがあり、アプリケーションのパフォーマンスを確認してください。

于 2012-05-06T01:08:38.347 に答える