これは以前に尋ねられましたが、古いスレッドであったため、同じスレッドを再度更新したくありません。
freeコマンドの出力からの「バッファ」および「キャッシュ」列について自分自身を明確にしたい。
これが私の理解です...
バッファは、データがメモリ内にあるものの、まだディスクにフラッシュされていないものです。データはデーモンによって定期的にディスクにフラッシュされますが、コマンドbdflushを実行して手動でフラッシュすることもできますsync。
一方、キャッシュは、メモリにロードされるプログラム/データですが、メモリに保持されるため、再度必要になった場合にすぐに利用できます。
buffers の概念を理解するために、次の実験を試みました...
freeこれは私のデスクトップでのコマンドの読み取りです
[zama@localhost ~]$ free -m
キャッシュされた使用済みの空き共有バッファの合計
メモリ: 2897 465 2431 0 30 230
-/+ バッファ/キャッシュ: 204 2692
スワップ: 4000 0 4000
[zama@localhost ~]$ sync
[zama@localhost ~]$ free -m
キャッシュされた使用済みの空き共有バッファの合計
メモリ: 2897 466 2431 0 30 230
-/+ バッファ/キャッシュ: 205 2691
スワップ: 4000 0 4000
syncここでは、コマンドの実行後にバッファーが減少するのを確認できません。
次に、次のことを試しました...巨大なファイルをディスクに書き込もうとしました。
[zama@localhost ~]$ dd if=/dev/zero of=test bs=1024k
予想どおり、キャッシュされた値は増加するはずであり、解放はこれを確認しています..
@localhost ~]# free -m
キャッシュされた使用済みの空き共有バッファの合計
メモリ: 2897 1466 1430 0 32 1127
-/+ バッファ/キャッシュ: 306 2590
スワップ: 4000 0 4000
syncコマンドを再度実行し、を使用して確認しfreeました。commandの出力からバッファ値が減少していることがわかりますfree。キャッシュの減少はありませんでした。これは、ddcoomand の実行後に RAM 内のダーティ ページが disk にフラッシュされたことを意味します。
@localhost ~]# free -m
キャッシュされた使用済みの空き共有バッファの合計
メモリ: 2897 1466 1430 0 10 1127
-/+ バッファ/キャッシュ: 306 2590
スワップ: 4000 0 4000
drop_cache次に、キャッシュ値がドロップされるようにカーネルパラメーターを更新しました
[root@localhost ~]# cat /proc/sys/vm/drop_caches 0 [root@localhost ~]# echo "1" > /proc/sys/vm/drop_caches [root@localhost ~]# cat /proc/sys/vm/drop_caches 1
freeバッファとキャッシュの両方の値がドロップされていることを確認するようになりました。
[root@localhost ~]# free -m
キャッシュされた使用済みの空き共有バッファの合計
メモリ: 2897 299 2597 0 1 74
-/+ バッファ/キャッシュ: 224 2672
スワップ: 4000 0 4000
したがって、「バッファ」はまだディスクにフラッシュされていない RAM データであるという私の最初の声明は正しいようです。
私が正しい方向にいるかどうかを教えてください。