ホームページ  >  記事  >  運用・保守  >  Apache が同時接続の最大数を変更する

Apache が同時接続の最大数を変更する

王林
王林転載
2020-10-26 16:38:153038ブラウズ

Apache が同時接続の最大数を変更する

Apache は、mpm_beos、mpm_event、mpm_netware、mpmt_os2、mpm_prefork、mpm_winnt、mpm_worker など、さまざまなオペレーティング システム用に複数の異なる MPM モジュールを提供します。条件が許せば、実際のニーズに応じて、指定された MPM モジュールを独自の Apache にコンパイルできます (Apache のソース コードは公開されており、ユーザーが自分でコンパイルすることができます)。ただし、コンパイル時に選択しない場合、Apache は次の表に従って、さまざまなオペレーティング システムに応じて対応する MPM モジュールを選択します。これは、Apache がさまざまなプラットフォームに対して推奨する MPM モジュールでもあります。

#(推奨チュートリアル:

apache)

さまざまなオペレーティング システムのデフォルトの MPM モジュール

オペレーティング システムの MPM モジュールの説明

Windowsmpm_winnt 導入する必要はありません:)

Unix/Linuxmpm_prefork 導入する必要はありません:)

BeOSmpm_beos は、Be Company によって開発されたマルチメディア オペレーティング システムです。正式版は更新を停止しています。

Netwarempm_netware NOVELL によって発売されたネットワーク オペレーティング システム

OS/2mpmt_os2 元々は Microsoft と IBM によって共同開発されましたが、現在は IBM が単独で開発しているオペレーティング システム (Microsoft は OS/2 を放棄し、開発に切り替えました) Windows)

mpm_event モジュールは、mpm_worker モジュールのバリアントと見なすことができますが、実験的なものであり、一般に使用は推奨されません。

もちろん、Apache は、さまざまなオペレーティング システムに応じて対応する MPM モジュールをコンパイルした完成版の Apache も公式 Web サイトで提供しています。ここをクリックして Apache 公式 Web サイトにアクセスし、ダウンロードできます。

さらに、Apache で内部的に使用されている MPM モジュールの種類を知りたい場合は、コマンド ラインを使用して Apache インストール ディレクトリ\bin に入り、コマンド httpd -l を入力して表示できます。現在 Apache によって内部的に使用されている MPM モジュール。

httpd -l コマンドを使用して、コンパイルされたモジュールを表示します

通常の開発作業では、BeOS、NetWare、OS/2 およびその他のオペレーティング システムは一般的ではないため、ここでは主に Windows に焦点を当てます。および Unix/ Linux オペレーティング システム上の MPM モジュールについて説明します。 Windows および Unix/Linux オペレーティング システムには、mpm_winnt、mpm_prefork、mpm_worker の 3 つの主要な MPM モジュールがあります。

mpm_prefork モジュール

mpm_prefork モジュールは主に Unix/Linux プラットフォーム上の Apache サーバーで使用されます。その主な動作方法は次のとおりです: Apache サーバーの起動時に、mpm_prefork モジュールは複数のモジュールを事前に作成します子プロセスの数 (デフォルトは 5) の場合、クライアントのリクエストを受信した後、mpm_prefork モジュールはそのリクエストをサブプロセスに転送して処理します。各サブプロセスは同時に 1 つのリクエストを処理するためにのみ使用できます。現在のリクエストの数が事前に作成されたサブプロセスの数を超える場合、mpm_prefork モジュールは追加のリクエストを処理するために新しいサブプロセスを作成します。 Apache は常に、今後のリクエストに備えて予備またはアイドル状態の子プロセスをいくつか維持しようとします。このように、クライアントのリクエストは、受信後に子プロセスが生成されるのを待つ必要がありません。

mpm_prefork モジュールでは、各リクエストが子プロセスに対応するため、他の 2 つのモジュールよりも多くのシステム リソースを占有します。ただし、mpm_prefork モジュールの利点は、その各サブプロセスが対応する単一のリクエストを独立して処理するため、リクエストの 1 つで問題が発生しても、他のリクエストに影響を与えないことです。同時に、mpm_prefork モジュールは、スレッド セーフではないサードパーティ モジュール (PHP の非スレッド セーフ バージョンなど) に適用でき、スレッド デバッグをサポートしていないプラットフォームでも簡単にデバッグできます。また、mpm_prefork モジュールは、mpm_worker モジュールよりも安定性が高くなります。

mpm_worker モジュール

mpm_worker モジュールも主に Unix/Linux プラットフォーム上の Apache サーバーで使用されており、mpm_prefork モジュールの改良版とみなすことができます。 mpm_worker モジュールは、mpm_prefork モジュールと同様に機能します。ただし、同じリクエストを処理する場合、プロセスベース (mpm_prefork など) はスレッドベースの処理よりも多くのシステム リソースを消費します。したがって、mpm_prefork モジュールとは異なり、mpm_worker モジュールでは、各子プロセスが固定数のサービス スレッドとリスニング スレッドを作成し、各サービス スレッドがクライアントのリクエストを処理できるようにします。リスニング スレッドは、アクセス リクエストを監視して送信するために使用されます。処理と応答のためにサービス スレッドに渡されます。 Apache は常に、予備またはアイドル状態のサービス スレッドのプールを維持しようとします。このようにして、クライアントは、新しいスレッドまたはプロセスが処理される前に確立されるのを待つ必要がありません。

mpm_prefork モジュールと比較して、mpm_worker モジュールはシステム リソースのオーバーヘッドをさらに削減できます。さらに、複数のプロセスを使用し、各プロセスには複数のスレッドがあるため、完全なスレッドベースの処理方法と比較して、ある程度の安定性が追加されます。

mpm_winnt モジュール

mpm_winnt モジュールは、Windows オペレーティング システム専用に最適化および設計された MPM モジュールです。別の子プロセスを作成し、この子プロセス内で複数のスレッドを順番に生成してリクエストを処理するだけです。

MPM モジュール構成の変更

Apache の MPM モジュールをある程度理解したら、さまざまな MPM モジュールに対する Apache の最大同時接続構成を変更できます。

1.MPM モジュール設定ファイルを有効にする

Apace インストール ディレクトリ/conf/extra ディレクトリに httpd-mpm.conf という名前の設定ファイルがあります。このファイルは主に MPM モジュールを構成するために使用されます。ただし、デフォルトでは、Apache の MPM モジュール構成ファイルは有効になっていません。したがって、次のように httpd.conf ファイルでこの構成ファイルを有効にする必要があります。

# サーバー プール管理 (MPM 固有) conf/extra/httpd-mpm.conf を含めます (コメント記号「#」を削除します) ")

2. MPM モジュール構成ファイル内の関連する構成を変更します

MPM モジュール構成ファイルを開始した後、テキスト エディターを使用して構成ファイルを開くことができます。以下の図に示すように、この設定ファイルには多くの設定ノードがあることがわかります。

対応する設定は、Apache が対応する MPM モジュールを使用する場合にのみ有効になります

現時点では、次のことが必要です。 Apache サーバーが現在使用している MPM モジュールに応じて、対応するノードのパラメーター設定を変更します。まず、mpm_winnt モジュールのデフォルト構成を見てみましょう。

#mpm_winnt モジュールは 1 つのサブプロセスのみを作成するため、ここでの 1 つのサブプロセスのパラメーター設定はパラメーター設定と同等です。 Apache全体に対して。 ThreadsPerChild 150# 推奨設定: 小規模 Web サイト = 1000 中 Web サイト = 1000~2000 大規模 Web サイト = 2000~3500MaxRequestsPerChild 0# 推奨設定: 小 = 10000 中または大 = 20000 ~ 100000

#対応する構成パラメーターは次のとおりです。 :

ThreadsPerChild

子プロセスごとの同時スレッドの最大数。

MaxRequestsPerChild

各子プロセスが処理できるリクエストの合計数。処理されたリクエストの累積数がこの値を超えると、サブプロセスは終了します (その後、必要に応じて新しいサブプロセスを作成するかどうかを決定します)。この値を 0 に設定すると、リクエストの総数が制限されないことになります (サブプロセスは終了しません)。 )。

このパラメータをゼロ以外の値に設定することをお勧めします。これにより、次の 2 つの利点が得られます。

プログラム内で発生する可能性のあるメモリ リークが無期限に継続し、メモリが枯渇するのを防ぐことができます。 。

サーバーの負荷が軽減されたときにアクティブなプロセスの数を減らすために、プロセスに制限された存続期間を与えます。

注: リクエスト数のカウントに関連する上記のパラメーターのうち、KeepAlive 接続の場合は、最初のリクエストのみがカウントされます。

次に、mpm_perfork モジュールと mpm_worker モジュールのデフォルト構成を見てみましょう:

#mpm_perfork モジュール StartServers 5# 推奨設定: Small = デフォルト Medium = 20~50 Large = 50 ~100MinSpareServers 5# 推奨設定: StartServers MaxSpareServers 10# 推奨設定: Small=20 Medium=30~80 Large=80~120 MaxClients 150# 推奨設定: Small=500 Medium=500~1500 Large=1500~3000MaxRequestsPerChild 0#推奨設定: Small = 10000 Medium または Large = 10000~500000 (さらに、MaxClients の値と最もよく一致するように ServerLimit パラメータを追加設定する必要があります。)

# StartServers:  数量的服务器进程开始
# MinSpareServers:  最小数量的服务器进程,保存备用
# MaxSpareServers:  最大数量的服务器进程,保存备用
# MaxRequestWorkers:  最大数量的服务器进程允许开始
# MaxConnectionsPerChild:  最大连接数的一个服务器进程服务

prefork 制御プロセスは最初に確立されます。 「StartServers」 子プロセスが作成されたら、MinSpareServers で設定したニーズを満たすプロセスを作成し、1 秒待って 2 つ作成し続け、さらに 1 秒待って 4 つ作成し続けます... このようにして、プロセスの数が増えます。作成されるプロセスは、MinSpareServers で設定された値に達するまで、最大 1 秒 32 まで指数関数的に増加します。このモードでは、リクエストが来たときに新しいプロセスを作成する必要がなくなるため、システムのオーバーヘッドが削減され、パフォーマンスが向上します。 MaxSpareServers はアイドル プロセスの最大数を設定します。アイドル プロセスの数がこの値より大きい場合、Apache は一部の冗長プロセスを自動的に強制終了します。この値をあまり大きく設定しないでください。ただし、値が MinSpareServers より小さい場合、Apache は自動的に MinSpareServers 1 に調整します。サイトの負荷が重い場合は、MinSpareServers と MaxSpareServers の両方を増やすことを検討してください。

MaxRequestsPerChild は、各子プロセスが処理できるリクエストの数を設定します。各子プロセスは、「MaxRequestsPerChild」リクエストの処理後に自動的に破棄されます。 0 は無限、つまり子プロセスが決して破棄されないことを意味します。デフォルト設定を 0 にすると、各子プロセスがより多くのリクエストを処理できるようになりますが、これをゼロ以外の値に設定すると、次の 2 つの重要な利点もあります:

1. 偶発的なメモリ リークを防ぐことができます。 2. サーバーの負荷が低下すると、子プロセスの数が自動的に削減されます。

したがって、この値はサーバーの負荷に応じて調整できます。

MaxRequestWorkers ディレクティブ セットは、同時に処理できるリクエストの数を制限します。通常、MaxRequestWorkerslimit 内の接続試行は、ListenBacklog に基づくディレクティブの数までキューに入れられます。

apache2.3.13 より前のバージョンでは、MaxRequestWorkers は MaxClients と呼ばれていました。

(MaxClients は、これらの命令の中で最も重要です。これは、Apache が同時に処理できるリクエストを設定します。これは、Apache のパフォーマンスに最も大きな影響を与えるパラメータです。そのデフォルト値の 150 は、リクエストの総数がこの値に達した場合 (ps -ef|grep http|wc -l で確認できます)、処理されたリクエストが完了するまで後続のリクエストはキューに入れられます。非常に遅い主な理由は、システム リソースが残っているのに HTTP アクセスが残っていないことです。理論的には、値が大きいほど処理できるリクエストは多くなりますが、Apache のデフォルトの制限は 256 を超えることはできません。)

#mpm_worker モジュール StartServers 2#推奨設定: Small=デフォルト Medium=3~5 Large=5~10MaxClients 150#推奨設定:Small=500 Medium=500~1500 Large=1500~3000MinSpareThreads 25#推奨設定:Small=デフォルト 中=50~100 大=100~200MaxSpareThreads 75#推奨設定: Small=デフォルト 中=80~160 Large=200~400 ThreadsPerChild 25#推奨設定: Small=デフォルト 中=50~100 Large=100~200MaxRequestsPerChild 0#推奨設定: Small = 10000 Medium または Large = 10000~50000 (さらに、MaxClients/ThreadsPerChild が 16 より大きい場合は、ServerLimit パラメーターを追加で設定する必要があります。ServerLimit は、MaxClients/ThreadsPerChild の値以上である必要があります。) )

対応する構成パラメータは次のとおりです:

StartServers

Apache の起動時に作成される子プロセスの数。

MinSpareServers

アイドル状態の子プロセスの最小数。

いわゆるアイドル状態の子プロセスとは、リクエストを処理していない子プロセスを指します。現在のアイドル状態の子プロセスの数が MinSpareServers 未満の場合、Apache は 1 秒あたり 1 つの最大速度で新しい子プロセスを生成します。このパラメータの調整は、非常にビジーなマシンでのみ必要です。この値は大きすぎてはなりません。

MaxSpareServers

アイドル状態の子プロセスの最大数。

このパラメータは、非常にビジーなマシンでのみ調整する必要があります。この値は大きすぎてはなりません。このディレクティブの値を MinSpareServers よりも小さく設定すると、Apache は自動的に値を MinSpareServers 1 に変更します。

MaxClients

同時接続に許可されるリクエストの最大数。

MaxClients 制限を超えるリクエストは、ListenBacklog ディレクティブ制限の最大値に達するまで待機キューに入ります。

非スレッド MPM (つまり、mpm_prefork) の場合、MaxClients は、クライアント リクエストの処理に使用できる子プロセスの最大数を示します。デフォルト値は 256 です。この値を増やすには、ServerLimit も増やす必要があります。

スレッド型または混合 MPM (つまり、mpm_beos または mpm_worker) の場合、MaxClients はクライアント要求の処理に使用できるスレッドの最大数を表します。スレッド化された mpm_beos のデフォルト値は 50 です。混合 MPM のデフォルト値は、16 (ServerLimit) と 25 (ThreadsPerChild) の積です。したがって、提供するプロセスが 16 を超えるように MaxClients を増やす場合は、ServerLimit の値も増やす必要があります。

MinSpareThreads

アイドル状態のスレッドの最小数。

MPM が異なると、このコマンドの処理方法も異なります。

mpm_worker のデフォルト値は 75 です。この MPM は、サーバー全体のアイドル状態のスレッドの数を監視します。サーバー内のアイドル スレッドの合計数が少なすぎる場合、子プロセスは新しいアイドル スレッドを生成します。 mpm_netware のデフォルト値は 10 です。この MPM は 1 つの子プロセスのみを実行するため、当然、この MPM はサーバー全体に基づいてアイドル状態のスレッドの数も監視します。 mpm_beos と mpmt_os2 は、mpm_netware と同様に機能します。mpm_beos のデフォルト値は 1 で、mpmt_os2 のデフォルト値は 5 です。

MaxSpareThreads

アイドル状態のスレッドの最大数。

MPM が異なると、このコマンドの処理方法も異なります。

mpm_worker のデフォルト値は 250 です。この MPM は、サーバー全体のアイドル状態のスレッドの数を監視します。サーバー内のアイドル スレッドの合計数が大きすぎる場合、子プロセスは過剰なアイドル スレッドを強制終了します。 mpm_netware のデフォルト値は 100 です。この MPM は 1 つの子プロセスのみを実行するため、当然、この MPM はサーバー全体に基づいてアイドル状態のスレッドの数も監視します。 mpm_beos と mpmt_os2 は、mpm_netware と同様に機能します。mpm_beos のデフォルト値は 50、mpmt_os2 のデフォルト値は 10 です。

注: ServerLimit は、Apache が作成できるプロセスの最大数を表します。 Apache には、コンパイル時に ServerLimit 20000 (mpm_prefork モジュールの場合は ServerLimit 200000) という内部ハード制限があることに注意してください。この制限を超えることはできません。

このコマンドを使用する場合は特に注意してください。 ServerLimit が実際に必要な値よりも大幅に高い値に設定されている場合、過剰な共有メモリが割り当てられます。 ServerLimit や MaxClients をシステムの処理能力を超える値に設定すると、Apache が起動しなくなったり、システムが不安定になる場合があります。

注: 関連パラメータを設定するときは、まずサーバーに十分なハードウェア パフォーマンス (CPU、メモリなど) があることを確認してください。起動時からサーバーの実行時間が増加するにつれて、サーバーのメモリ使用量が増加していることが判明した場合は、プログラム内のメモリ リークが発生している可能性があります。メモリ リークの影響を軽減するために、パラメータ MaxRequestsPerChild の値を下方に調整してください。できるだけ早く続行し、プログラムのどこに問題があるかを見つけてください。

以上がApache が同時接続の最大数を変更するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjianshu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。