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は無視)
- 見方
- 大きく分けて「カーネル用メモリ」「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よりも低い値となるのはなぜ?
この図の通りbuff/cache
は一部は解放可能ですが、一部は解放不可です。そのため厳密にはavailable=free + buff/cache(解放可能部分)となります。
used の計算がtotal - free - cache - buffと違うのはなぜ?
↑と同じ理由です。cacheやbuffのうち一部解放できないものがあり引き算に使えないためです。
cacheとbuffersの違いは?
ここにまとめました。