freeコマンドの見方

2020.10.27 (火)
$ free -h
              total        used        free      shared  buff/cache   available
Mem:           117G         71G        5.2G        3.7G         40G         40G
Swap:           15G        346M         15G

freeコマンドの中身

total: 合計メモリ量
used: メモリ使用量(実際にプロセスで使用されているメモリ量)
free: 全く使われていない未割り当てのメモリ量
shared: 共有メモリで使用しているメモリ量
buff/cache: ファイルバッファ+キャッシュメモリに使われているメモリ量
available: プロセスが利用できるメモリ量

totalがOSが積んでいる物理メモリ量になります。
buff/cacheがいわゆる現在利用されているメモリ量と解釈してよさそうです。システムではHDDに保存してある情報を一度メモリに読み込んでから読み書きを処理します。つまりメモリ上にのかった情報を操作して情報に更新や修正があった場合は任意のタイミングでHDDの書込みを行います。(通常はCommand+Sや:wなどの保存動作を行ったときになります。) いわゆるソフトウェアを起動し情報を処理をたくさんするとこのbuff/cacheが増え続けるということになります。
sharedは見なくていいです。忘れていいです。(マニュアルより: 共有メモリの欄は無視してほしい。これは古い機能の名残である。)
availableはswapせずに利用できる(可能性のある)メモリ量を示しています。これはbuff/cacheと同じ値を示していることが多い(または近似値)のですが、buff/cacheは一時的にソフトが利用中のメモリであるという意味から処理が終わり保存できればすぐに開放されるであろう空きメモリに相当するというものです。現在は何かしらで使用中だけれど、使えるメモリとして開放できるものということになります。availableがどのように計算されているのか私もよくわからないのですが、buff/cacheと近似値であるのは、システム的には理解できるというわけです。

空き容量というときは以下の観点で判断します。

  • free: 現時点での空き容量
  • available: swapを使わずに他のプロセスのメモリを開放して新たに利用できるだろうメモリ量

となります。
通常メモリの空き容量という場合には後者になるということです。

ですので、空きメモリの算出やメモリの枯渇具合を判断する際には、availableを見るようにすればよいわけですが、常にメモリを開放できないサービスが激しく稼働しているシステムなどはまた別になります。そういう場合はfreeで示される量の方が空き容量としてリアルな数字となりそうです。

used: = total – free – buff/cache