1

の間に常識的に認められた比率として何かがありますか?

  • HTTP コネクタmaxThreads (ユーザー要求を処理する最大 HTTP スレッド)、
  • HTTP コネクタの acceptCount (可能なすべての要求処理スレッドが使用中の場合の着信接続要求の最大キュー長)
  • DB プールのmaxActive (プール内の最大 DB 接続数) 構成プロパティー

データベースを頻繁に使用するTomcatを使用するWebベースアプリケーションに関しては?

つまり、たとえば、ほぼすべての HTTP 要求接続がデータベースを集中的に使用しているということです。したがって、fe の場合、構成された DP プールのmaxActive (たとえば 100) ははるかに少なく、HTTP コネクタのmaxThreads (たとえば 200) は 2 倍大きくなります。次に、1 つの同じ DB 接続を HTTP 接続間で共有する可能性があります。これにより、DB の使用率が高くなり、 DB の接続が停止する可能性があります。

ほとんどの場合、Web HTTP リクエストの構成はデータベース プールの構成とは関係がないことは承知していますが、プロパティ間の比率 (maxThreads/acceptCount maxActive) に関する一般的なケース/プラクティスはありますか? たとえば、HTTP の maxThreads を DB の maxActive よりも大きくするのが一般的な方法です (ただし、この例では 100% 大きいと考えるのは多すぎます。最大で 20% または 50% 大きいとしましょう)。値なので、他の HTTP 要求がアプリケーションによって処理されるまでに HTTP 要求をキューに入れるには?

ここにも同様の質問があります: Tomcat - Http コネクタで maxThreads と acceptCount を構成していますが、それ以上の正確な答えはありません

4

1 に答える 1

1

まず、いくつかの説明:

  • 分離要件を破らないように、JDBC 接続はスレッド間で共有されません。プールが使い果たされると、接続が割り当てられるかタイムアウトが発生するまで、リクエストはキューで待機します。
  • リクエストはmaxThreads値まで到着すると処理されます。追加のリクエストは、acceptCount値までキューに入れられます。

acceptCount :可能なすべての要求処理スレッドが使用中の場合の着信接続要求の最大キュー長。

  • この例ではmaxActiveがボトルネックであるため、その数を超えるリクエストはデータベース接続を待機します。より正確には、ボトルネックは db 接続プールにあります。db 接続が停止するのではなく、プールからの接続を待機しているスレッドが発生します。

そうは言っても、 maxActiveが制限を課すため、これらの値の比率を見つけることにはあまり価値がありません。maxThreads >= maxActiveは明らかな経験則です。

アプリケーションの負荷がそうでない限り、 maxThreadsに到達することはありませんが、データベース プールがその負荷に対処できなければ、アプリケーションは失敗します。

この場合のパフォーマンスのチューニングは、制限を設定することよりも、データベース接続プールとスレッド プールのダイナミクスを調整することです。制限に達したら、速度低下の原因となっているコードを見つけるか、スケールアップするかのどちらかで、やるべきことはあまりありません。

プールのダイナミクスとは、アイドル接続/スレッドの最小値、アイドル状態を維持する時間、プール内で一度に作成される新しいエントリの数などを指します。

お役に立てれば!

Tomcat 7 HTTP コネクタ ドキュメント

于 2018-11-06T17:53:56.190 に答える