Apache 2のメモリ使用量を制限する


9

私は、Debian PPC Squeeze 2.6.30を実行している古代のBlue&White G3 / 300から趣味のWebサーバーを実行しています。パフォーマンスは、再起動後しばらくは問題ありませんが、最終的にはますます手に負えなくなります。現在、稼働時間は76日で、主な原因は10以上のapache2プロセスのメモリ使用量にあるようです。

、、および/の値を下げる必要があると思いますがStartServers、どれを調整するかわかりません。使用しているmpmモジュールに応じて、それぞれに3つのセクションがあります。MinSpareServersMaxSpareServers

次のセクションのどれを変更する必要があるか、およびボックスに448 MBの物理メモリ(64、128、および256スティックそれぞれの奇妙なアップグレード履歴)があるとすると、どのような妥当な値がわかりますか?

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

<IfModule mpm_worker_module>
    StartServers          2
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadLimit          64
    ThreadsPerChild      25
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

<IfModule mpm_event_module>
    StartServers          2
    MaxClients          150
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadLimit          64
    ThreadsPerChild      25
    MaxRequestsPerChild   0
</IfModule>

私のapache2.confにStartServersの他のインスタンスはありませんが、それらのmpmモジュールはいずれもmods-availableまたはに表示されませんmods-enabled。アイデア?

ありがとう!


私は、ボックスのメモリが不足していると仮定しました(そして、お粗末なパフォーマンスは、スワッピングが激しいためです)。スワッピングしない場合は、詳細についてバグを
報告し

回答:


6

最近のWebサーバーでは400MBはそれほど多くありません。ボックスの交換を検討してください:)

とは言っても、メモリ使用量が急増している場合は、おそらくどこかでメモリリークが発生しています。httpdプロセスのサイズを簡単にテストして、Apacheを停止/開始して、それらがはるかに小さいかどうかを確認してください。彼らが数日間それらを監視している場合、それらが成長するかどうかを確認します。

それがメモリリークである場合の実際の解決策は、メモリリークを見つけて修正することですが、それは通常お尻の痛みMaxRequestsPerChildなので、0以外(無制限)に調整することもできます。これにより、Apacheワーカーが一定数のリクエストを処理したときに、Apacheワーカーを強制終了します(プロセスでリークしたメモリを強制的に放棄します。

より大きな値(数千程度)から始めて、数百に向かって作業を進めます。子ごとのリクエストが100未満になると、メモリリークが大きくなり、apacheワーカーを絶えず再起動してパフォーマンスが低下するため実際に修正する必要があります。


Re:どのmpmを調整するか、答えはほぼ確実preforkです。
あなたは走って、確かにあなたを告げるラインをhttpd -V探すことができますServer MPM:


1
-Vにより、必要なprefork情報が提供されました(ただし、私の場合はapache2 -Vです)。ありがとう!
UltraNurd 2010

トリックをしたようです。問題は、稼働している子サーバーが多すぎるために物理メモリーとスワッピングが不足していることでした(それぞれが約80 MBを取得しています)。そして、はい、サーバーは古いです。しかし、それは要求をほとんど処理していません:oD。
UltraNurd 2010

1
大量のリクエストを処理していない場合は、元の投稿で述べたように、スタート&スペアサーバーの数を削減することもできます(開発システムでは、RAM使用量を減らすために、すべて2〜5に設定しています)
voretaq7

最終的に、最小スペアと最大スペアを5と10から3と6にドロップすることになり、スワップが発生しないように十分なRAMが残っているようです。ありがとう!
UltraNurd 2010

1

Apacheプロセスのメモリ使用量を特定するには、MaxClientsを調整する必要があります。

一般的な経験則は次のとおりです:(最大希望メモリ)/(1つのApacheプロセスのメモリ使用量)=#最大クライアント

最後に、MaxSpareServers <= Max Clientsになるように調整する必要もあります。

1つのプロセスのメモリ使用量は、ロードしたモジュール(phpなど)に大きく依存するため、最大クライアント数を少し低く設定することをお勧めします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.