フラミナル

考え方や調べたことを書き殴ります。IT技術系記事多め

【Linux】freeコマンドの内容を図解化してわかりやすく説明します

freeのコマンド結果の意味を解説します。

$ free -h
              total        used        free      shared  buff/cache   available
Mem:           3.7G        577M        2.3G        406M        853M        2.5G
Swap:          2.0G          0B        2.0G

図解化するとこうなります。(Swapは無視)

f:id:lirlia:20200423102226p:plain

  • 見方
    • 大きく分けて「カーネル用メモリ」「free(空き)」「プロセス用メモリ」があります。
    • カーネル用メモリの一部に「buff/cache」があります。
    • カーネル用メモリやbuff/cacheは解放可能なメモリと解放不可のメモリがあります。

Mem(メモリ)のそれぞれの意味はこちら。

名前 意味
total システムが利用できる合計メモリサイズ
used カーネルとプロセスが使用している合計メモリサイズ(total - free - cache - buff)
free 余っているメモリサイズ
shared tmpfsに使われている共有メモリ
buffers バッファキャッシュのメモリサイズ(バッファキャッシュとはファイルシステム経由ではなく、デバイスファイル経由でディスクにアクセスするときに利用されるキャッシュ のこと)
cache ページキャッシュのメモリサイズ (ページキャッシュとはファイルシステム経由でディスクにアクセスするときに利用されるキャッシュのこと)
buff/cache バッファキャッシュとページキャッシュの合計メモリサイズ
available 実質的な空きメモリ。freeが少なくなってきたら解放できるカーネル用のメモリのサイズを足したもの

あといくつメモリが利用できるのか?availableの値をチェックすればOKです。ただしavailableが0に近づくにつれてバッファキャッシュやページキャッシュが使えなくなることでIO時の処理速度が低下する場合がありますので注意してください。


Swap(スワップ)の意味はこちら。

名前 意味
total システムが利用できる合計スワップサイズ
used 使用中のスワップサイズ
free 使われていないスワップサイズ

よくある質問

availableがfree + buff/cacheよりも低い値となるのはなぜ?

f:id:lirlia:20200423073855p:plain

この図の通りbuff/cacheは一部は解放可能ですが、一部は解放不可です。そのため厳密にはavailable=free + buff/cache(解放可能部分)となります。

used の計算がtotal - free - cache - buffと違うのはなぜ?

↑と同じ理由です。cacheやbuffのうち一部解放できないものがあり引き算に使えないためです。

cacheとbuffersの違いは?

ここにまとめました。

blog.framinal.life