web-dev-qa-db-ja.com

低メモリアプリケーションの優先度

メモリが限られていて、スワップスペースを追加するオプションがないマシンでDebianを実行しています。このマシンは、Webおよびデータベースサーバーとして機能します。私が見ている問題は、複数のWebリクエストが着信すると、データベースが接続の受け入れを停止し、システムに使用可能なRAMがなくなったためにクラッシュすることさえあるということです。

別のプロセス(私の場合はFirebird)がメモリを要求し、十分でない場合に、特定のプロセス(私の場合はApache)を強制終了するようにLinuxに指示することは可能ですか?ネイティブで行うことができない場合は、これを達成するのに役立つツールがありますか?

5
Rytis

特定のプロセスを優先するように、OOMキラーを調整できます。各プロセスには、システムがOOM状況で実行された場合に、プロセスが強制終了される可能性を示すスコアがあります。プロセスのスコアは/proc/${PID}/oom_scoreで確認できます。 /proc/${PID}/oom_adjを使用して、OOMキラーの決定にバイアスをかけることができます。値が高いと、OOMキラーが$ {PID}を強制終了する可能性が高くなります。 oom_adjの値は子に継承されるため、起動時にマスターApacheプロセスで設定するだけです(この場合、Apacheを再起動するウォッチドッグを使用する必要があります)。別の方法は、マスタープロセスをデフォルトレベルのままにし、各子を調整して、マスターが存続し、必要に応じて子を再生成することです(この場合、新しい子をチェックしてoom_adjを調整する外部デーモンが必要です)。もちろん、これはマルチプロセスワーカーを使用していることを前提としています;-)

oom_adj値の通常の範囲(-16,15)はバイアスにすぎないことに注意してください。スコアが十分に高い場合、OOMキラーのヒューリスティックは別のプロセスを選択する可能性があります。特別な値-17を使用すると、OOM killerはプロセスを強制終了できなくなりますが、強制終了できないプロセス(DBなど)が異常終了すると、カーネルがメモリ不足から回復できない可能性があるため、危険です。

11
Luca Tettamanti

レンタルVMを使用している場合は、スワップパーティションの代わりにスワップファイルを追加するだけです。パフォーマンスは低下しますが、少なくとも必要なときに使用可能なメモリがあります:)

スワップファイルを作成するにはどうすればよいですか?

Sudo dd if=/dev/zero of=/swapfile bs=1024 count=1000000

これにより、サイズ1GB(ラウンド)のファイル(/ swapfile)が作成されます。

Sudo mkswap /swapfile

このファイルをスワッププールに追加します

Sudo swapon /swapfile

これでうまくいきます。これで、1Gbのスワップメモリ​​が追加されました。

4
saschabeaumont