これは以前に尋ねられましたが、古いスレッドであったため、同じスレッドを再度更新したくありません。
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
。キャッシュの減少はありませんでした。これは、dd
coomand の実行後に 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 データであるという私の最初の声明は正しいようです。
私が正しい方向にいるかどうかを教えてください。