web-dev-qa-db-ja.com

Linuxで「バッファ」メモリの使用を制限する方法はありますか?

LinuxサーバーのRAMのディスクキャッシュバッファーへの割り当てを制限し、代わりにアイドル状態のままにしておきたい(重要な場合はCentOS 5)。すべてのドロップを使用するのが理想的であることを知っています。物理RAM使用可能何かディスクをキャッシュするだけでも-Linuxはその点で優れています。ほとんどの場合、これを打ち負かそうとは考えていません。なぜ私がしたいのか教えてください(私はない監視について心配しています):

私の会社は一部のVMについてサードパーティと契約を結んでおり、毎月の請求書にコミットされたメモリ制限が含まれています。超過分は非常に高価です。これらのVMのうち2つは、プロセスの起動時にchews RAMですが、安定すると使用量が大幅に減少するアプリケーションを実行します。開発者は、このサービスが何であるかを保証します。これらのVMは、通常の実行モードで通常必要とされるRAMの約2倍でプロビジョニングされたままになります。安定したら、追加のバッファキャッシュにスローされ、誰もが幸せになります。財務担当者を除きます。

私たちのプロバイダーは、仮想データセンターのコミットされた合計金額に対してバッファーキャッシュに割り当てられたRAMをカウントするため、毎月支払います。たくさん。私は何でも気にしないと思います。キャッシュ-アプリが起動するときを除いて、より少ないRAM(つまり、より少ないキャッシュ)で実行し、ファイルアクセスでパフォーマンスに少し影響を与えます(私は推測します...)ゼロからアップし、実際に地獄に戻ったり戻ったりしないようにRAMする必要があります。

だから私はLinuxに「ねえ、ディスクキャッシュのバッファリングに1GB(またはそれ以上、x%)の無料のRAMを使用するだけです、うん、ただ先に進んでください残りの部分を無駄にします!」。RAMが実際に無料で保持され、バッファに割り当てられていない場合、コミットされたものにはカウントされないため、何年にもわたって多くの$を節約できます。金額であり、「レンタル」する必要はありませんが、somethingが使用しているため、バッファキャッシュだけであっても、料金を支払います。

私はよく検索しましたが、「OMGなぜ私のサーバーは常にほぼ100%になっているのですか...」などの質問や、監視/アラーム/ nmに夢中になり、応答によって教育を受けている人々がほとんどです-それは- ない私の質問; 10年前にも同じ反応がありましたが、この場合は実際には使用したくないRAMなので、アプリが不要なときに「家賃を払う」必要はありません。それ。

これを達成する別の方法を考えている場合は、別の提案を歓迎します。

どうもありがとう...

2
BrentHarsh

キャッシュを防ぐことができるかどうかはわかりませんが、定期的にLinuxにキャッシュを削除するように依頼することはできます。それを行う方法はそこで説明されています: https://unix.stackexchange.com/questions/87908/how-do-you-empty-the-buffers-and-cache-on-a-linux-systemsyncの直前にecho to /proc/sys/vm/drop_cachesコマンド、それは多くのRAMを解放するはずです。

Linuxは、ファイルを開いてキャッシュすることによってRAMを積極的に埋めることはありません。実際にアクティブなファイルのみがキャッシュされます。これは、プログラムのバイナリコードを含め、アプリケーションで使用されるファイルである可能性があります。

ログファイルにすることもできます。これを回避するには、ネットワークロギングを使用できます。

もう1つのアプローチは、RAMがはるかに少ない仮想マシンでアプリケーションを実行し、RAMディスクをスワップデバイスとして実行することです(そして、幸福度を制御します)が、少し複雑です。

あなたのプロバイダーは、どのくらいのRAMが割り当てられているが、システムによって使用されていないかをどのように知っているのだろうか。 ramのこれらのページは、使用されていなくても、空にはなりません。

1
Olivier

vm.min_free_kbytesが役立つようです。例えば。実行中

echo 5248000 > /proc/sys/vm/min_free_kbytes

システムは常に512MBを維持するように強制されますRAM空き。プロセスがメモリを必要とする場合、プロセスはそれを取得します。その後、システムは、おそらくバッファを解放することによって、その量のメモリを再び解放するのに苦労します。他のプロセスをキャッシュまたはスワップアウトします。アプリケーションの開始後にこのパラメータを設定できます。

0
idspispopd

このアプリケーションによってキャッシュが作成された場合、アプリが安定した後に cgroups を使用できると思います。

メモリ制限付きのgroup1のような名前のcgroupを作成します(たとえば、50GB、CPUなどの他の制限がサポートされています。たとえばCPUも言及されています)。

cgcreate -g memory,cpu:group1

cgset -r memory.limit_in_bytes=$((50*1024*1024*1024)) group1

次に、起動後にアプリをこのcgroupに入れます。

cgclassify -g memory,cpu:group1 $(pidof your_app_name)
0