解決策 1:
サーバーが SSH と HTTP に応答しないのに ping が機能するというコメントで、これに対する回答を提供しましたが、どうやらあなたは私を信じていないようです。ほんとだ、本当だ!
MaxClients
のサイズにする必要があります / ServerLimit
あなたのシステムに。あなたが言及している「最小/最大サーバーの 5 ~ 10 の設定」は基本的に関係ありません。 サーバーは、Apache が保持することを何もせずにぶらぶらしています。
MaxClients を適切に設定するには、httpd
の典型的な上限値を見てください。 (または apache2
) プロセスを作成し、使用可能なメモリをそれで割ります。システムの残りの部分が呼吸できるように、少し下に下げるのが最善です。 4GB の RAM と 185MB のプロセスがあるため、これは ServerLimit
を意味します。 値はせいぜい 21 でなければなりません — おそらく 20 か 19 です。
さて、190MB は典型的ではないかもしれません。通常の使用量の別の見積もりに基づいて、ServerLimit をより高く設定できますが、基本的には、スパイクが発生しないことに賭けています。その場合、システムのメモリが不足します。
ワーカーごとのメモリ使用量を制限する方法を見つけることができれば、それは成功です。これは PHP Ate My RAM のケースに違いありません。下位の memory_limit
内にアプリをコーディングできますか ?それができない場合は、PHP を実行する別のモデルが必要です。それができない場合は、RAM を追加購入する必要があります。
解決策 2:
Apache の prefork MPM はサーバーを自己管理します。常に StartServers
で始まります MinSpareServers
未満で実行されることはありません 動き出したら。また、最終的には MaxSpareServers
を超えるサーバーを廃止/強制終了します。 それらが十分長くアイドル状態である場合 (このコンテキストでの「十分な時間」が何であるか、またはそれを変更できるかどうか/どのように変更できるかは思い出せません)。
ServerLimit
任意の時点で実行できる apache デーモンの最大数を設定します。これが、状況で何百ものスリープ状態の apache プロセスを持つことができる理由です (それらは、大量の要求を処理するために生成され、十分な時間アイドル状態ではありませんでした)。まだマザープロセスによって強制終了されていません)。
個人的には ServerLimit
に対して 1250 はかなり高い値だと思います /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
. :)
解決策 3:
キープアライブをオフにして、MaxClients を 150 に設定します。260 のプロセスがそのまま残っている理由として最も可能性が高いのは、Apache 構成ファイルで KeepAlive がオンに設定されているため、Apache がブラウザー接続を開いたままにしておくためです。