バッファ/キャッシュを減らす方法

バッファ/キャッシュを減らす方法

モニタリングシステムは、マイコンピュータがRAM使用しきい値に到達/違反していることを警告し続けます。15GB

私は少し読んで、明確なRAMの使用は実際には行われず、サーバーのパフォーマンスを向上させるためにディスクI / O操作のキャッシュ/バッファリングに追加のRAMが使用されることがわかりました。私はこのサーバーでMySQLを実行していますが、これが唯一のサービスです。

  • それでは、しきい値に違反しないようにディスクI / Oキャッシュ/バッファRAMを減らすことはできますか?これはLinuxの問題ではなくMySQLの問題かもしれませんか?

これが出力ですfree -gt

[root@ipk ~]# free -gt
             total       used       free     shared    buffers     cached
Mem:            15         15          0          0          0          9
-/+ buffers/cache:          5         10
Swap:            5          0          5
Total:          21         15          6

Linuxのバージョンは次のとおりです。

[root@ipk ~]# uname -rmo
2.6.32-220.el6.x86_64 x86_64 GNU/Linux

答え1

あなたは私たちの意見や私たちが「公式」にリンクしたさまざまなページを受け入れないようです。おそらく公式Red Hat文書あなたを説得します:

この例で使用可能な合計メモリーは 4040360KB です。 264224KB はプロセスで使用でき、3776136KB は他のアプリケーションで使用できます。28160KBが使えるという最初の行に混同しないでください!使用量データを見ると、ほとんどのメモリ使用量がバッファとキャッシュに使用されることがわかります。Linuxは、バッファ(ファイルシステムのメタデータ)とキャッシュ(ファイルまたはブロックデバイスの実際の内容を含むページ)に利用可能なメモリを使用してディスクの操作を高速化するために常にRAMを使用しようとします。これはディスク情報がすでにメモリにあるため、I / O操作を節約し、システムの実行速度を向上させるのに役立ちます。Oracleなどのプログラムやアプリケーションにスペースが必要な場合、Linuxはバッファとキャッシュを解放してアプリケーションがメモリを使用できるようにします。システムがしばらく実行されている場合、通常は「アイドル」フィールドの下の最初の行に小さな数字が表示されます。

答え2

良いことですが、メモリ要求を行ってディスクキャッシュが解放する必要がある項目にマッピングするまでの待ち時間はどうですか?もちろん小さいか目立たないと言うこともできますが、この過程で追加された0.0000001秒が気になることもあります。私のRAMがどのように使用されるかを決める人は誰ですか?

これらの遅延時間を経験したくない場合はどうすればよいですか?おそらく私のアプリがドライブからゆっくりロードされるのは問題ではありませんが、ディスクキャッシュからマップされていないメモリが遅れず、すぐにRAMを占有したいと思うかもしれません。

ディスクキャッシュに使用されるRAMの量を制限する方法は?これを行う方法がないとは言わないでください。

修正する:方法が見つかりました。

echo 3 | sudo tee /proc/sys/vm/drop_caches

aを実行して下さい:free -m上記の確認を実行した後。効果がある

答え3

モニタリングで実際にどの指標を使用しているのか知っていますか?最新のLinuxカーネルの場合、デフォルトでは次の手順に従う必要がありますMemAvailable

$ grep MemAvailable: /proc/meminfo 
MemAvailable:   11747552 kB

なぜなら、Free、Cache、Buffersは、自分が何をしているのかを知らない限り、何の意味もないからです。バッファとキャッシュは同じで、すべての共有メモリを含みます。たとえば、PostgreSQLを実行してshared_buffersその値を10 GBに設定すると、バッファ/キャッシュ値は10 GB増加し、メモリはサービスの中断他のすべてはカーネルによって処理されます。ただ追加してFree追加できると言う人は、Cache過去のシステムや必要な場合、実際にすべてのキャッシュを削除できる特別な場合について話すことです。

最新のカーネルは、このような理由で利用可能なメモリを計算します。カーネルバージョンと実行ファイルの両方が十分に新しい場合、free出力は次のようになります。

$ free -m
              total        used        free      shared  buff/cache   available
Mem:          31807        6161        5097         970       20547       11471
Swap:          1590          51        1538

最後の列を参照してくださいavailable。これがあなたが集中しなければならない価値です。上記の例は、5GBの空き容量と20GBのキャッシュを示しています。一般的な目的ではこれを無視してください。突然、15GBのRAMが必要なプログラムを実行している場合、キャッシュは削除されるのではなく、OOM Killerがアクションを取ったと仮定します。

私の経験によると、「利用可能」がゼロに達すると、システムはまだ正常に応答できますが、カーネルが知っている限り、システムは速度を遅くする危険性がなくてもロードを処理できません。

意味のある別の値は、Committed_AS実際のRAMを超えるとシステムのメモリが不足する可能性がありますが、実際の結果は実行しているプログラムによって異なります。fork()呼び出すがメモリを汚さない大規模なプログラムを実行すると、おそらく大丈夫でしょう。 Linuxメモリ管理のCoW機能のおかげです。例えば、

$ grep -E 'MemTotal:|Committed_AS:' /proc/meminfo 
MemTotal:       32570620 kB
Committed_AS:   20839784 kB

この例では、MemTotal負の値がCommitted_AS近いだけですが、MemAvailable信じられません。一般的なワークロードの場合、OOM Killerは通常、アプリケーションがCommitted_AS約130%以上に達するMemTotalとアプリケーションを終了し始めます。もちろん、多くのスワップを追加すると、OOM Killerは有効になりませんが、スワップのためにシステムが遅くなります。

関連情報