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です)
縦軸:空きメモリ容量(単位: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 トップ]