freeコマンド

freeコマンドについて調べてみました。

freeコマンドの実行結果の例

total       used       free     shared    buffers     cached
Mem:        515312     435600      79712          0     145228     209168
-/+ buffers/cache:      81204     434108
Swap:      1048568         64    1048504


それぞれの項目の説明

Mem:(物理メモリの情報)

total認識されている物理メモリの容量
used使用されている物理メモリの容量
free使用されていない物理メモリの容量
sharedプロセス間通信を行うアプリケーションの為に確保される共有メモリの容量(/proc/sys/kernel/shm*とかで設定する)
buffersデータはHDDへ書き出される前に物理メモリ上に一旦置かれる。この為に確保されているバッファの容量(/proc/sys/vm/*とかで設定する)
cachedHDDから読み込まれたデータは物理メモリ上に一旦キャッシュされる(ページキャッシュ)。この為に確保されている容量

-/+ buffers/cache:(実際に使用可能か否かを考慮した物理メモリの情報)

used実際に使用している物理メモリの容量
free実際に使用可能な物理メモリの容量

Swap(使用可能なスワップメモリの容量)

used実際に使用しているスワップメモリの容量
free実際に使用可能なスワップメモリの容量

まとめ

物理メモリの空き容量としてMem:freeを見てしまいがちだけど、Mem:buffersとMem:cachedは必要に応じて開放されるので実際には空き容量と考えることができる。
この実際に即した数値が-/+ buffers/cache:。

それぞれ、

-/+ buffers/cache:used = Mem:used - (Mem:buffers + Mem:cached)
-/+ buffers/cache:free = Mem:free + (Mem:buffers + Mem:cached)

の結果が表示されている。

上の例でいくと、空きメモリ容量は79712キロバイトしか空いてないのかなと思いがちですが、本当は434108キロバイトも空いてるんだと考えて良いです。