この記事は 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 の領域に割り当てられてしまうからです。
ですが 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
コメント