18

現在、Apache 2.2.3 と Tomcat 5 (JBoss 4.2.2 に組み込まれています) をmod_proxy_jkコネクタとして使用しています。

以下の値を計算/構成する正しい方法に誰かが光を当てることができますか(関連する可能性のある他のものと同様に)。Apache と Tomcat はどちらも別々のマシンで実行されており、大量の RAM (それぞれ 4GB) を備えています。

関連する server.xml 部分:

<Connector port="8009"
    address="${jboss.bind.address}"
    protocol="AJP/1.3"
    emptySessionPath="true"
    enableLookups="false"
    redirectPort="8443"
    maxThreads="320"
    connectionTimeout="45000"
/>

関連する httpd.conf 部分:

<IfModule prefork.c>
  StartServers       8
  MinSpareServers    5
  MaxSpareServers   20
  ServerLimit      256
  MaxClients       256
  MaxRequestsPerChild  0
</IfModule>
4

3 に答える 3

7

サーバーが取得する可能性のあるワークロードを考慮する必要があります。

最も重要な要因は、ピーク時に同時に接続されているクライアントの数である可能性があります。それを決定し、次の方法で設定を調整してみてください。

  • ApacheとTomcatの両方に十分な処理スレッドがあるため、サーバーの負荷が高いときに新しいスレッドを生成する必要はありません。
  • サーバーには、リソースを浪費するため、必要以上に多くの処理スレッドがありません。

この種のセットアップを使用すると、サーバーの内部メンテナンスオーバーヘッドを最小限に抑えることができます。これは、特に負荷が散発的である場合に非常に役立ちます。

たとえば、1秒あたり最大300の新しいリクエストがあるアプリケーションについて考えてみます。各リクエストの処理には、平均2.5秒かかります。これは、いつでも同時に処理する必要のある最大750のリクエストがあることを意味します。この状況では、起動時に最大750の処理スレッドを持つようにサーバーを調整する必要があります。また、非常に高い負荷を処理するために、最大で最大1000の処理スレッドなどを追加することもできます。

また、スレッドが何のために必要かを正確に検討してください。前の例では、各リクエストは他のリクエストから独立しており、セッショントラッキングは使用されていません。より「Webっぽい」シナリオでは、ユーザーがWebサイトにログインしている場合があり、使用するソフトウェアによっては、ApacheやTomcatが同じスレッドを使用して1つのセッションで着信する要求を処理する必要がある場合があります。この場合、より多くのスレッドが必要になる可能性があります。ただし、少なくともTomcatを知っているので、とにかく内部でスレッドプールで動作するため、これを考慮する必要はありません。

于 2008-09-21T02:44:18.063 に答える
5

最大クライアント

これは、Apache が一度に処理する必要がある並列クライアント接続の基本的な上限です。

プリフォークでは、プロセスごとに 1 つのリクエストしか処理できません。したがって、 1 つのリクエストを処理するのにかかる時間内に、Apache 全体で最大$MaxClients リクエストを処理できます。もちろん、この理想的な最大値に到達できるのは、アプリケーションが要求ごとに 1/$MaxClients 未満のリソースを必要とする場合のみです。

たとえば、アプリケーションが 1 つのリクエストに応答するのに 1 秒の CPU 時間を要する場合、MaxClients を 4 に設定すると、スループットが 1 秒あたり 4 つのリクエストに制限されます。各リクエストは Apache 接続を使い果たし、Apache は一度に 4 つしか処理しません。 . しかし、サーバーの CPU が 2 つしかない場合、壁時計の 1 秒ごとに 2 つの CPU 秒しかないため、これにも到達できませんが、リクエストには 4 つの CPU 秒が必要です。

MinSpareServers

これは、いくつのアイドル プロセスが滞留する必要があるかを apache に伝えます。この数値が大きいほど、追加のプロセスを生成する前に apache が飲み込めるバースト ロードが増えます。これはコストが高く、現在のリクエストの速度が低下します。

これの正しい設定は、ワークロードによって異なります。多くのサブリクエスト (画像、iframe、javascript、css) を含むページがある場合、1 つのページにヒットすると、短時間により多くのプロセスが使用される可能性があります。

MaxSpareServers

未使用の apache プロセスが多すぎるとメモリが浪費されるだけなので、apache は MaxSpareServers 数を使用して、リクエストのバーストに備えて保持するスペア プロセスの量を制限します。

MaxRequestsPerChild

これにより、単一のプロセスがその存続期間中に処理するリクエストの数が制限されます。安定性を非常に懸念している場合は、ここに実際の制限を設定して、apache プロセスを継続的にリサイクルし、リソース リークがシステムに影響を与えないようにする必要があります。

StartServers

これは、apache がデフォルトで開始するプロセスの量です。システムのウォームアップ時間を短縮するために、これを実行中の apache プロセスの通常の量に設定します。この設定を無視しても、Apache は Min-/MaxSpareServers 値を使用して、必要に応じて新しいプロセスを生成します。

詳しくは

Apache のマルチプロセッシング モジュールのドキュメントも参照してください。

于 2008-09-19T21:49:20.043 に答える
1

通常、デフォルト設定は、アプリケーションが実際に必要とするものを確認するための適切な出発点です。あなたが予想しているトラフィックの量がわからないので、MaxThreads、MaxClients、および MaxServers を推測するのは少し難しいです。私が扱っているほとんどの顧客 (主に Tomcat で Java アプリを実行している顧客を扱う Linux Web ホストで働いている) は、それほど多くの調整を必要とせずに、かなり長い間デフォルト設定を使用していると言えます。

多くのトラフィックを期待していない場合、これらの設定が「高すぎる」からといって、それほど影響を受けることはありません。必要にならない限り、Apache は 256 の潜在的なクライアント全体にリソースを割り当てるつもりはありません。Tomcat についても同様です。

于 2008-09-20T01:03:59.090 に答える