web-dev-qa-db-ja.com

MPM Prefork、Apache2プロセスが多すぎる?

私はこの設定を持っています:

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    ServerLimit      1250
    MaxClients            1250
    MaxRequestsPerChild   1500
</IfModule>

最小/最大サーバーの5〜10の設定を使用すると、Apache 2プロセスが大量に存在する可能性がありますか?

彼らは5-10の間だけではないのですか? O_O(d * mn Apache)をスリープさせる260プロセスを見てください

クリック http://img200.imageshack.us/img200/3285/senzatitolo1iw.jpg

Edit1:

ここの30分後、上部の画面:

クリック: http://img816.imageshack.us/img816/1645/immagineov.png

UPの24時間後(MEM使用のトップ注文者)

説明をありがとう

(debian 6、ランプ、4GB RAM)

6
dynamic

ServerがSSHとHTTPに応答しないがpingは機能する に関するコメントでこれに対する答えを示しましたが、どうやらあなたは私を信じていません。本当に、それは本当です!

システムに合わせてMaxClients/ServerLimitをサイズ設定する必要があります。あなたが言及している「最小/最大サーバーの5-10設定」は基本的に無関係です—それはextraサーバーの数だけであり、何もしていませんApacheは保持されます。

MaxClientsを適切に設定するには、httpd(またはApache2)プロセスの一般的な最高水準点を確認し、使用可能なメモリをそれで割ります。システムの残りの部分が呼吸できるように、少しずつ下げるのが最善です。 4 GBのRAMと185 MBのプロセスがあるため、ServerLimitの値は最大で21、おそらく20または19でなければなりません。

さて、190MBは非定型かもしれません。通常の使用量の別の見積もりに基づいて、ServerLimitを高く設定できますが、基本的には、スパイクが発生しないことを賭けています。それが起こった場合、システムは メモリ不足 になります。

ワーカーごとのメモリ使用量を制限する方法を見つけることができれば、それは勝利です。私はこれが PHP Ate My RAM のケースであることを賭けています。下位のmemory_limit内に存在するようにアプリをコーディングできますか?それができない場合は、PHPを実行するための別のモデルが必要です。それができない場合は、RAMを追加購入する必要があります。

12
mattdm

Apacheのprefork MPMはサーバーを自己管理します。それは常にStartServersデーモンで始まり、一度実行するとMinSpareServersより少なく実行されることはありません。また、アイドル状態が十分に長い場合、MaxSpareServersを超えるサーバーは最終的にリタイア/強制終了されます(このコンテキストでの「Long Enough」が何であるか、またはどのように変更できるか思い出せません) 。

ServerLimitは、いつでも実行できるApacheデーモンの最大数を設定します-これが、この状況で数百のスリープ状態のApacheプロセスが存在する可能性がある理由です(それらは、大量の要求を処理するために生成され、母親のプロセスによって殺されるのに十分なほど長い間アイドル状態でした)。


個人的には、1250はServerLimit/MaxClientsのかなり高い値だと思います-250の方が妥当な数値かもしれません(ただし、大量に取得すると、503/Server Busyエラーが時々発生する可能性がありますリクエストのフラッド:それが慢性的な問題になる場合は、数を増やすか、負荷を処理するサーバーを追加できます)。

この質問を 前の質問 に関連付けますRe:メモリ不足のクラッシュです。 のガイダンスに従ってくださいこのパラメーターのApacheマニュアル

Most important is that MaxClients be big enough to handle as many simultaneous
requests as you expect to receive, but small enough to assure that there is enough
physical RAM for all processes.

…そして私の個人的な公理:It's better to give a client a 503 page than knock the server down。 :)

8
voretaq7

KeepalivesをオフにしてMaxClientsを150に設定します。260のプロセスがそこにあるだけの最も可能性の高い理由は、Apache設定ファイルでKeepAlive onが設定されているため、Apacheがブラウザー接続を開いたままにしているためです。

2
kashani

私の経験では、プロセス数に関する他のパラメーターを適切に設定した後、KeepAliveTimeoutを調整するのは努力する価値があります。チューニングとは、パラメーターを少し変更してサーバーの応答性を測定することを意味します。私たちのサイトの中で、KeepAliveTimeout=3さらにKeepAliveTimeout=1KeepAliveがオフになっていると、どれも満足できません。この追加の調整により、余分なRAMを購入/割り当てるのが早すぎます。

グレースフルリスタートの直後に変更が有効になるため、チューニングは簡単です。

Sudo Apache2ctl -k graceful

(Googleがまだ関連性があると見なしているため、古いスレッドを復活させています...;))

1
Franc Drobnič

次のコマンドを実行して、システムのRAM=の制約内で実行できるサーバーの数を計算します。

$ ps -ylC Apache2 | awk '{x += $8;y += 1} END {print "Apache Memory Usage (MB): "x/1024; print "Average Process Size (MB): "x/((y-1)*1024)}'

次のような出力が生成される場合:

Apache Memory Usage (MB): 1608.76
Average Process Size (MB): 55.4745

ここで、Apacheを停止し、freeを使用して、Apacheなしで使用できるRAMがどれだけあるかを確認します。

               total       used       free     shared    buffers     cached
  Mem:       7629384    7415780     213604          0     333428    5341884
  -/+ buffers/cache:    1740468    5888916
  Swap:      7629380       7968    7621412

(上記はキロバイト単位です。free -mはメガバイトを表示します。)

Linuxは利用可能なメモリをバッファとキャッシュで満たすため、free + buffers + cache(213604 + 333428 + 5341884)を追加すると、5888916 Kバイトが利用可能になります。

588916K利用可能/ Apacheプロセスあたり55474K = 106サーバー。ただし、それよりも低く設定して、呼吸室を残します。

1
andy magoon