@tooljpさんをフォロー

ファイルキャッシュ増減の検証 【Redhat Enterprise Linux 6.2】

Linux カーネルでは物理メモリは空きがある限りすべてファイルキャッシュに使用します。(ただし必要となればファイルキャッシュは即座に開放されるため、簡単に物理メモリ不足にはなりません)
メモリ管理の仕組みはこちらを参照してください。→メモリ管理の仕組みと使用量の計算

このページでは実際に巨大ファイルを多数生成しメモリの空きが増える様子とそのファイルをすべて削除してキャッシュが開放される様子を紹介します。

1.巨大ファイル生成、及び空きメモリ記録

以下のシェル「memorytest.sh」ではtest_1 〜 test_30までの100MBのファイルを30個作成します。作成するたびに、「memory_test_result.txt」 ファイルに free コマンドを実行し空きメモリ容量を記録します。

#!/bin/sh

echo "start memory test" > memory_test_result.txt

CNT=1

while [[ $CNT -le 30 ]];
do
dd if=/dev/zero of=test_$CNT bs=100MB count=1 > /dev/null 2>&1
free | grep Mem: >> memory_test_result.txt
CNT=`expr $CNT + 1`
done

exit 0

実行結果:

# cat memory_test_result.txt
start memory test
Mem: 2051164 499860 1551304 0 21496 253524
Mem: 2051164 600788 1450376 0 21496 351636
Mem: 2051164 701468 1349696 0 21504 449356
Mem: 2051164 802164 1249000 0 21504 547020
Mem: 2051164 902736 1148428 0 21508 644680
Mem: 2051164 1003300 1047864 0 21508 742344
Mem: 2051164 1103740 947424 0 21508 840008
Mem: 2051164 1204304 846860 0 21508 937672
Mem: 2051164 1304868 746296 0 21512 1035340
Mem: 2051164 1405300 645864 0 21512 1132940
Mem: 2051164 1505872 545292 0 21516 1230664
Mem: 2051164 1606436 444728 0 21520 1328280
Mem: 2051164 1707000 344164 0 21524 1426004
Mem: 2051164 1807448 243716 0 21524 1523604
Mem: 2051164 1884628 166536 0 17460 1601908
Mem: 2051164 1886124 165040 0 8464 1610776
Mem: 2051164 1889348 161816 0 8464 1613976
Mem: 2051164 1883644 167520 0 8484 1608476
Mem: 2051164 1888108 163056 0 8484 1613212
Mem: 2051164 1880296 170868 0 8488 1605656
Mem: 2051164 1883892 167272 0 8484 1609244
Mem: 2051164 1887852 163312 0 8488 1613208
Mem: 2051164 1879156 172008 0 8492 1604912
Mem: 2051164 1882008 169156 0 8496 1607724
Mem: 2051164 1884496 166668 0 8500 1610152
Mem: 2051164 1877428 173736 0 8512 1603420
Mem: 2051164 1880156 171008 0 8516 1606232
Mem: 2051164 1882636 168528 0 8520 1608660
Mem: 2051164 1885356 165808 0 8524 1611500
Mem: 2051164 1883752 167412 0 8524 1610028

以下の通り空き容量がほぼ無くなるまで物理メモリがファイルキャッシュとして使用されます。(物理メモリは約2GBです)

Linux 物理メモリ空きとファイルキャッシュのグラフ

縦軸:空きメモリ容量(単位:GB)
横軸:作成したファイル数

100MB ファイル14個作成した時点でファイルキャッシュサイズが1.4GB増加しています。よって14 × 10MB = 1.4GBであり作成したすべてのファイルがキャッシュされていることが分かります。

2.ファイルを削除しファイルキャッシュを開放する

以下ではtest_1 〜 test_30までのファイルをすべて削除しています。削除するとファイルキャッシュが開放され、メモリ空き容量が回復1,737,176 (約2GB)しているのが分かります。

# rm -rf test_*
# free
total used free shared buffers cached
Mem: 2051164 313988 1737176 0 9696 79636
-/+ buffers/cache: 224656 1826508
Swap: 2047992 0 2047992

[redhat linux 技術ドキュメント トップ]
[FAQ CENTER トップ]