3

PHPで記述された非常に軽量な追跡スクリプトがあり、Apache / 2.2.14(Ubuntu)で実行されています。スクリプトは多数の同時接続を受け取りますが、各接続は高速になります。現在、次のように構成されたプリフォークを使用しています。

StartServers          5
MinSpareServers       5
MaxSpareServers      10
ServerLimit         600
MaxClients          600
MaxRequestsPerChild   0

キープアライブオフもあります

私はこれらの設定をかなり試し、apacheベンチマークでテストしてきました。abを使用して同時接続を確立すると、「apr_socket_recv:接続がピア(104)によってリセットされました」というメッセージが表示されます。また、ファイル記述子の最大数を増やしました。

そこにあるapacheの達人が、このタイプのセットアップ(軽量接続の数が多い)の正しい方向に私を向けることができるかどうか疑問に思っています。StartServers、Min / MaxSpareServersなどの最適値は何ですか?ワーカーMPMは調査する価値がありますか?どんな考えでも大歓迎です。

4

1 に答える 1

4

私はあなたにいくつかのヒントを与えることができます:

  • preforkの代わりにワーカーモードでApacheを使用してみてください。これを行うには、PHPをfastcgiモード(php-fpm)にするか、スレッド化されたApacheワーカー内のmod_phpに保持するリスクを負います(リスクは、ロケール設定のように、siome外部ライブラリが競合する可能性があることですが、PHpトラッキングコードが小さい場合は、マルチスレッドが有効になっているすべてのものを制御できます-外部ライブラリのないPHP5はマルチスレッドが有効です)
  • MaxClientが600の場合は、600を、にStartServers入れMinSpareServersますMaxSpareServers。それ以外の場合、Apacheは非常に低速で新しいフォークを作成しています:

親プロセスは、1秒あたり最大1の速度で新しい子を作成します。

サーバーが600フォークを処理できると思われる場合は、RAMを使用して600フォークを作成し、MaxRequestsPerChild設定を3000などに変更して、古いフォークを削除して再作成することもできます(memleaksを回避します)。フォークの作成率を失うことはなく、Apacheは子の作成と削除の管理を失うことはありません。

  • キープアライブを無効にすることは、あなたがしたように、あなたの場合には良いことです
  • プリフォークモードまたはワーカーモードのいずれかでMaxLientsの正しい値を知るには、それをテストし、1つのフォークで使用されるメモリを追跡し、使用可能なRAMのサイズをこの数で割ります。注意してください、phpはRAMも使用します。mod_phpでは、このRAMはapacheフォークのメモリ使用量になります。php-fpmではphp-fpmプロセスになります。PHPのmemory_limit設定で、1つのPHPの最大サイズを確認してください。処理する。
  • PHP RAMの使用量を減らして、より多くのPHPスクリプトを並行して実行できるようにします。大きな配列を作成したり、セッションを軽くしたりしないでください。APCオペコードを使用すると、メモリフットプリントが削減される可能性があります(その他の優れた機能も実行できます)。5.2ではなくPHP5.3も使用します。
于 2011-11-11T13:31:39.770 に答える