Linuxのfree コマンドの見方とオプション ~availableやbuff/cacheの定義~ | SEの道標
Linux基礎

Linuxのfree コマンドの見方とオプション ~availableやbuff/cacheの定義~

この記事は CentOS8.2 で確認しています。

メモリの状態確認コマンド free

free コマンドはメモリの利用状態を確認することができます。

例えば以下のように表示されます。(数値の単位は KiB= 1024 Bytes)

[root@localhost ~]# free
              total        used        free    shared  buff/cache   available
Mem:        3868920      197528     3402296      8680      269096     3444844
Swap:        839676           0      839676

ヘッダ (total, used, free, shared, buff/cache, available) のそれぞれの関係は下図の通りです。

このコマンドで、メモリの空き状況を確認したいのであれば、free を見るよりも available を見ましょう。

というのも、Linux の特性として「空きメモリを無駄にしない」という設計思想の元、free の領域は徐々に、でも着実に buff/cache の領域に割り当てられてしまうからです。

監視システムで見たときに、あまり稼働していない Linux のメモリ領域が徐々に減っていっているとしたら、この free の領域を監視している可能性があります。

ですが buff/cache の領域でも比較的すぐに解放可能な領域がありますので、別のアプリケーションが malloc ( ) 等のシステムコールにより OS へメモリを要求した時に、free で足りない部分はこの領域を解放してそのアプリケーションに割り当てます。

なので、available では「完全に未割当の free」に加え、「buff/cache のうちすぐに解放できる領域」の総容量を表示しています

total, used, free, shared, buff/cache, available について

total

total はそのまんまですが、マシンへのメモリ搭載量です。例で言うと 3868920 KiB (≒3.7GiB) です。

used

used は OS (kernel) やアプリケーション (サービスやコマンド、スクリプト等) の実行に割り当てられたメモリ量です。httpd 等のサービスを起動すればその分割り当てられますし、負荷によってはアプリケーションが更なるメモリを OS (kernel) に要求するので、その際にはこの数値が増えます。

buff/cache

buff/cache の buff はカーネルバッファを意味します。カーネルバッファは主にメモリからの IO (Input/Output) をするためにデバイス毎に用意されたメモリ領域です。HDD や SSD 等のブロックデバイスとの読み書きに使われます。この領域は比較的短命であり、使い終わったらすぐに解放されます。

一方、cache は Page Cache (ページキャッシュ) や Slab Cache (スラブキャッシュ) などのファイルシステムやファイルへのアクセスを高速化するためのもので、buff と比べると長生きします。

cache と buffer の内訳は後述の -w オプションで確認することができます。

free

free は used にも buff/cache にも割り当てられていない、自由に使えるメモリの余り容量です。ただし、前述の通り、時間経過とともに buff/cache に徐々に割り当てられるため、何もしていないと徐々に減っていく傾向にあります。

shared

shared は tmpfs で使われる共有メモリです。df コマンドで以下のように表示される通り、/dev/shm や /run や /sys/fs/cgroup に割り当てられたりします。

tmpfs               tmpfs      1.9G     0  1.9G    0% /dev/shm
tmpfs               tmpfs      1.9G  8.5M  1.9G    1% /run
tmpfs               tmpfs      1.9G     0  1.9G    0% /sys/fs/cgroup

一般に OS 上のアプリケーションはユーザ空間に展開され、異なるアプリケーション間ではこのユーザ空間メモリ領域は共有できません。

tmpfs はメモリでありながら、Linux がファイルシステムの一部と認識するため、アプリケーションはここに情報を書き込むことで、他のアプリケーションへ情報伝達ができます。

通常のディスクを使うよりも高速であることと、再起動時にクリアされるのが特徴です

また、df コマンドでは上記のように 1.9GB が割り当たっていますが、実際には消費した分のみ (上記の例だと /run の中の 8.5MB) がメモリ消費量としてカウントされます。

available

前述の通り、available では「完全に未割当の free」に加え、「buff/cache のうちすぐに解放できる領域」の総容量を表示しています。

実質的なメモリの空き状況を見る指標として使われます。

free のオプション

単位関連 -b -k -m -g -h

デフォルトでは -k オプションが使われるため、free もしくは free -k とした場合、数値は KiB で表示されます。

free -m とした場合、数値は MiB (1024*1024 Bytes) で表示され、free -g とした場合は GiB (*1024*1024*1024 Bytes) となります。

一番簡単なのは free -h です。h は human の頭文字で、人間が見やすいように、ちょうどよい単位で表示してくれます。

ちなみに、--si をつけると、KiB , MiB , GiB ではなく KB (*1000 Bytes), MB (*1000*1000 Bytes), GB (*1000*1000*1000 Bytes) で表示されます。

[root@localhost ~]# free -h --si
              total        used        free      shared  buff/cache   available
Mem:           3.7G        235M        298M        1.0M        3.2G        3.3G
Swap:          819M        7.0M        812M
[root@localhost ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:          3.6Gi       235Mi       298Mi       1.0Mi       3.1Gi       3.2Gi
Swap:         819Mi       7.0Mi       812Mi

連続表示 -c -s

-c で表示回数、-s で表示間隔を指定します。

例えば free -c 3 -s 5 とした場合、5 秒間隔で 3 回 free の結果を表示してくれます。

[root@localhost ~]# free -c 3 -s 5
              total        used        free      shared  buff/cache   available
Mem:        3825780      241080      305380        1324     3279320     3345376
Swap:        839676        7692      831984

              total        used        free      shared  buff/cache   available
Mem:        3825780      241088      305372        1324     3279320     3345368
Swap:        839676        7692      831984

              total        used        free      shared  buff/cache   available
Mem:        3825780      241088      305372        1324     3279320     3345368
Swap:        839676        7692      831984

内訳確認 -w -l

-w は buff/cache の buffers と cache の内訳を確認します。

-l は used の high (ユーザ空間プログラム用) と low (主にカーネル空間プログラム用) の内訳を確認します。

[root@localhost ~]# free -wl
       total     used    free  shared  buffers    cache  available
Mem: 3825780   241236  305224    1324     3284  3276036    3345220
Low: 3825780  3520556  305224
High:      0        0       0
Swap: 839676     7692  831984

ちなみに、high, low の詳細については、man proc で確認できます。(free コマンドはそもそも /proc/meminfo のデータを切り取って表示している)

HighTotal %lu
   (Starting with Linux 2.6.19, CONFIG_HIGHMEM is required.)
   Total  amount  of  highmem.   Highmem is all memory above
   ~860MB of physical memory.  Highmem areas are for use  by
   user-space  programs,  or for the page cache.  The kernel
   must use tricks to access this memory, making  it  slower
   to access than lowmem.
LowTotal %lu
   (Starting with Linux 2.6.19, CONFIG_HIGHMEM is required.)
   Total  amount  of  lowmem.  Lowmem is memory which can be
   used for everything that highmem can be used for, but  it
   is  also  available for the kernel's use for its own data
   structures.  Among many other things, it is where  every‐
   thing  from  Slab  is  allocated.  Bad things happen when
   you're out of lowmem.

スワップを含めた総量確認 -t

スワップを含めた総量を表示します。

[root@localhost ~]# free -t
              total        used        free      shared  buff/cache   available
Mem:        3825780      241232      305224        1328     3279324     3345220
Swap:        839676        7692      831984
Total:      4665456      248924     1137208

バージョン確認 -V

free コマンドのバージョンを表示します。

[root@localhost ~]# free -V
free from procps-ng 3.3.15

コメント

タイトルとURLをコピーしました