web-dev-qa-db-ja.com

メモリ不足を自動的に防ぐ方法はありますか?

VPSubuntuサーバーのメモリが不足することがよくあります。 Apache2がメモリ不足になり始めたら、問題を解決しているように見えるので、Apache2を再起動する方法があればいいのにと思います。それとも私は問題を解決するのが面倒ですか?サーバーのメモリが限られています...

さて、より多くの情報:

私はApache2プリフォークを実行しています。これが私のメモリ設定です(私はそれらを微調整しています...):

StartServers         3
MinSpareServers      1
MaxSpareServers      5
MaxClients           150
MaxRequestsPerChild  1000

VPSには1GBのRAMがあり、ubuntu 11.0432ビットを実行します。

スクリプトに関しては、5つのブログがあるwordpressネットワーク、AskBot(python/Djangoスタックエクスチェンジクローン)のインストール、および実際には使用されていないMediaWikiのインストールがあります。 getid3ライブラリにアクセスしてポッドキャストのリストに情報を表示する自作のmp3スクリプトで、phpエラーがスローされているようですが、それが原因かどうかはわかりません...

4
yuttadhammo

Monit これを行うことができます。

次のような設定行を使用できます。

 check process Apache 
    with pidfile "/var/lock/Apache/httpd.pid"
    start program = "/etc/init.d/httpd start" with timeout 60 seconds
    stop program = "/etc/init.d/httpd stop"
    if 2 restarts within 3 cycles then timeout
    if totalmem > 100 Mb for 5 cycles then restart
    if children > 255 for 5 cycles then stop
    if cpu usage > 95% for 3 cycles then restart
    if failed port 80 protocol http then restart
    group server
    depends on httpd.conf, httpd.bin

monit.comのこの構成例 から変更)

これは、前述のulimitオプションにも影響を与える可能性があります。

サービスの再開はバンドエイドです。代わりに、メモリリークが発生している理由を調べてみてください。

4
Jodie C

Apacheで実行しているアプリケーションでメモリリークが発生していない限り、または特定の要求によってメモリが大量に要求されない限り、Apacheのメモリが不足することはありません。私は、あなたが求めるようなブルー​​トフォースソリューションを実装するよりも、そもそもなぜメモリが不足するのかを調査します。

上記のように、Apacheプロセスで「ps」を呼び出すだけの基本的なcronジョブスクリプトを実装し、それらが消費するメモリの量を調べ、必要に応じて再起動するのは非常に簡単です。これを毎分実行するだけで十分です。

しかし、繰り返しますが、これは良いアプローチではありません。

7
Sunny

Apacheをulimit -m Xで実行すると、Apache(およびその子)がXKRSSを超えると強制終了されます。 UbuntuがまだUpstartを使用しているかどうかはわかりませんが、使用している場合は、Apacheupstart構成ファイルにrespawnオプションを追加して、強制終了後に自動的に再起動することができます。

3
Mark Wagner

メモリが不足する可能性があるもう1つの理由は、ubuntuサーバーにスワップファイルがないことです。

時々発生する特定の要求が原因でマシンのメモリが不足し、大量のメモリが消費される場合があります。スワップファイル(サーバーメモリの約2倍の大きさである必要があります)がある場合は、問題が解決する可能性があります。

ただし、それでも、すべてのメモリが消費される原因を調査する必要があります。メモリが常に消費されて解放されない場合、スワップファイルは役に立ちません-すべてのメモリが消費され、スワッピングマシンが非常に非常に遅くなるため、実際には悪化する可能性があります。

0
Dima L.

これは実際にはかなり複雑な質問です。何がメモリを消費しているかに依存するからです。静的コンテンツを厳密に提供している場合(これはもう誰ですか?)、Apache構成を調べて、使用可能なメモリが処理できる以上の同時接続/スレッドを許可していないことを確認する必要があります。

いくつかのPHPスクリプト、またはすべてのメモリを不適切に消費している調整が不十分なバックエンドアプリケーションがある可能性があります。これは、大きなPHPアプリケーションが増加する場合に多く発生します。彼らのRAM起動時に最大32または64Mで、一度に4人の訪問者を獲得します。

サーバー上でApacheがどのように構成されているかに関する追加情報を投稿できますか?

0
Kyle Smith