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/*とかで設定する) |
cached | HDDから読み込まれたデータは物理メモリ上に一旦キャッシュされる(ページキャッシュ)。この為に確保されている容量 |
-/+ 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キロバイトも空いてるんだと考えて良いです。