Ubuntuでメモリ使用量を確認するコマンド【free/vmstat/top】

コマンド

Ubuntuでどのくらいメモリが使われているのかを確認したい場合、まず使うべきコマンドは free -h です。結論からお伝えすると、free・vmstat・top・/proc/meminfo の4つを組み合わせることで、メモリの状態を多角的に把握できます。

本記事では Ubuntu 24.04 LTS(docker run –rm ubuntu:24.04)で実際にコマンドを実行し、その実出力をそのまま掲載しています。Ubuntu 22.04 との違いも実測データで比較しています。

この記事のポイント

  • 空きメモリを確認するなら free -h の available 列を見る(free 列ではない)
  • /proc/meminfo の MemAvailable が「実際に使えるメモリ」の真の値
  • vmstat 1 5 で1秒間隔の推移を確認するとメモリ圧迫を早期に検知できる
  • Ubuntu 24.04(procps-ng 4.0.4)では vmstat に gu 列が追加された
  • スワップが使われ始めたら要注意——free -h の Swap 行で即確認できる

目次

  1. 動作確認済み環境
  2. free コマンドで全体像を把握する
  3. /proc/meminfo で詳細データを読む
  4. vmstat でリアルタイム推移を見る
  5. top でプロセス別メモリを確認する
  6. Ubuntu 22.04 vs 24.04 の出力の違い
  7. sysbench でメモリ帯域幅を実測する
  8. よくあるエラーと解決策
  9. まとめ

動作確認済み環境

本記事のコマンドは以下の環境で実行・確認しています。

項目 値
OS Ubuntu 24.04.2 LTS(Noble Numbat)
実行環境 Docker公式イメージ ubuntu:24.04(ARM64 / Apple Silicon)
procps バージョン 4.0.4(free / vmstat / top が含まれるパッケージ)
検証日 2026-06-13

注意

本記事のコマンドは Ubuntu 24.04 LTS で検証しています。Ubuntu 22.04 では procps のバージョンが異なり(3.3.17)、vmstat の列構成が一部異なります。詳しくは「Ubuntu 22.04 vs 24.04 の出力の違い」をご覧ください。

free コマンドで全体像を把握する

メモリ確認の第一歩は free コマンドです。インストール不要でほぼすべてのUbuntu環境で使えます。

①基本的な使い方

free -h は数字を「G」「M」といった人間が読みやすい単位で表示してくれます。このコマンドだけでメモリの大まかな状態がすぐつかめます。




ubuntu@server: ~
$ free -h
total used free shared buff/cache available
Mem: 11Gi 1.2Gi 6.8Gi 334Mi 4.2Gi 10Gi
Swap: 2.0Gi 0B 2.0Gi
free -h / free -m の実測出力(Ubuntu 24.04・実測)
free -h / free -m の実測出力(Ubuntu 24.04・実測)

上記は Ubuntu 24.04 で実際に取得した出力です。各列の意味は次のとおりです。

列名 意味 例(実測値)
total 物理メモリ総量 11Gi
used プロセスが使用中のメモリ 1.2Gi
free カーネルが未使用と管理している容量(実際に使える容量ではない) 6.8Gi
shared 複数プロセスで共有されているメモリ(tmpfsなど) 334Mi
buff/cache バッファ・ファイルキャッシュ(解放可能) 4.2Gi
available 新しいプロセスが実際に使える推定空き容量(最重要) 10Gi

正直、初学者が最もつまずくのはここです。「free が少ない = メモリ不足」ではありません。Linuxは空きメモリをファイルキャッシュとして積極的に使う設計のため、free 列は常に小さめに見えます。実際に新しいプロセスを起動できる余裕を表すのが available です。

②単位を変えて確認する




ubuntu@server: ~
$ free -m # メガバイト表示
total used free shared buff/cache available
Mem: 11963 1240 6974 334 4297 10722
Swap: 2047 0 2047

$ free -b # バイト表示(数値が大きくなる)
total used free shared buff/cache available
Mem: 12544270336 1300910080 7312826368 350253056 4506095616 11243360256
Swap: 2147479552 0 2147479552

free -m で実際にメガバイト単位の数字が確認できます。total が 11963 MB(≒11.7 GiB)、used が 1240 MB、available が 10722 MB というのが今回の実測値です。

③定期的に自動更新して監視する

一定時間ごとにメモリを記録したい場合は、-s(間隔)と -c(回数)オプションが便利です。




ubuntu@server: ~
$ free -h -s 1 -c 3 # 1秒間隔で3回
total used free shared buff/cache available
Mem: 11Gi 1.2Gi 6.8Gi 334Mi 4.2Gi 10Gi
Swap: 2.0Gi 0B 2.0Gi
<1秒後>
total used free shared buff/cache available
Mem: 11Gi 1.2Gi 6.8Gi 334Mi 4.2Gi 10Gi
Swap: 2.0Gi 0B 2.0Gi

/proc/meminfo で詳細データを読む

free コマンドは内部的に /proc/meminfo を読んでいます。生のデータを直接参照したい場合はこのファイルを cat または grep で確認します。




ubuntu@server: ~
$ cat /proc/meminfo | head -15
MemTotal: 12250264 kB
MemFree: 7319712 kB
MemAvailable: 11004316 kB
Buffers: 492796 kB
Cached: 3281952 kB
SwapCached: 0 kB
Active: 986052 kB
Inactive: 3278124 kB
Active(anon): 71784 kB
Inactive(anon): 759560 kB
Active(file): 914268 kB
Inactive(file): 2518564 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 2097148 kB
/proc/meminfo 主要フィールド説明表(実測)
/proc/meminfo 主要フィールド説明表(実測)

スクリプトでメモリを取得したい場合は、特定フィールドだけ grep で絞り込むのが効率的です。




ubuntu@server: ~
$ grep -E “^(MemTotal|MemFree|MemAvailable|SwapTotal|SwapFree)” /proc/meminfo
MemTotal: 12250264 kB
MemFree: 7319712 kB
MemAvailable: 11004316 kB
SwapTotal: 2097148 kB
SwapFree: 2097148 kB

今回の実測では MemTotal が 12,250,264 kB(≒11.7 GiB)、MemAvailable が 11,004,316 kB(≒10.5 GiB)でした。SwapFree が SwapTotal と同じ値なので、スワップはまったく使われていない健全な状態です。

awk で GB 換算して表示する




ubuntu@server: ~
$ awk ‘/MemTotal/ {printf “%.2f GB\n”, $2/1024/1024}’ /proc/meminfo
11.68 GB

$ awk ‘/MemAvailable/ {printf “%.2f GB\n”, $2/1024/1024}’ /proc/meminfo
10.49 GB

シェルスクリプトでメモリ監視を自動化するときは、/proc/meminfo から直接 awk で数値を取り出す方法が最もシンプルです。

vmstat でリアルタイム推移を見る

vmstat(virtual memory statistics)は、メモリだけでなくCPU・スワップ・I/O の状態をまとめて確認できる強力なコマンドです。継続的なメモリ監視には vmstat 1 10 が定番です。

①基本的な使い方




ubuntu@server: ~
$ vmstat
procs ———–memory———- —swap– —–io—- -system– ——-cpu——-
r b swpd free buff cache si so bi bo in cs us sy id wa st gu
2 0 0 7320736 492796 3753800 0 0 362 44759 8756 23 22 14 60 3 0 0
vmstat の実測出力(Ubuntu 24.04)
vmstat の実測出力(Ubuntu 24.04)

vmstat の出力で注目すべき列は次のとおりです。

列名 意味 実測値 判断基準
swpd 使用中のスワップ(kB) 0 0 なら問題なし
free 空きメモリ(kB) 7,320,736 参考値(available を重視)
si スワップイン(kB/s) 0 継続的に非ゼロなら要注意
so スワップアウト(kB/s) 0 継続的に非ゼロ = メモリ不足のサイン
gu ゲストCPU時間(24.04のみ) 0 KVM以外では常に0

②1秒間隔で連続監視する




ubuntu@server: ~
$ vmstat 1 5 # 1秒間隔で5回表示
procs ———–memory———- —swap– —–io—- -system– ——-cpu——-
r b swpd free buff cache si so bi bo in cs us sy id wa st gu
3 0 0 7320680 492796 3753800 0 0 362 44759 8756 23 22 14 60 3 0 0
0 0 0 7320880 492796 3753804 0 0 0 0 391 496 0 0 100 0 0 0
0 0 0 7320880 492796 3753804 0 0 0 0 328 548 0 0 99 0 0 0
0 0 0 7321492 492796 3753760 0 0 0 0 272 439 0 0 100 0 0 0
0 0 0 7322328 492796 3753748 0 0 0 216 1772 2826 1 1 98 0 0 0

実際に実行すると、最初の行はシステム起動からの累計値で、2行目以降が1秒ごとの差分値になります。si と so が 0 のままであれば、スワップは発生しておらずメモリには余裕があると判断できます。

③統計サマリを一覧表示する




ubuntu@server: ~
$ vmstat -s
12250264 K total memory
1242992 K used memory
986056 K active memory
3278016 K inactive memory
7322664 K free memory
492796 K buffer memory
3753756 K swap cache
2097148 K total swap
0 K used swap
2097148 K free swap

vmstat -s を使うと、メモリとスワップの詳細な統計情報をまとめて見られます。「used swap が 0」というのはシステムが健全な証拠です。

top でプロセス別メモリを確認する

top はリアルタイムでプロセス一覧を表示するコマンドです。どのプロセスがメモリを食っているかを特定するのに使います。

①バッチモードで1回だけ出力する

スクリプトやログ取得では -bn1 オプションを使って1回だけ出力させる方法が便利です。




ubuntu@server: ~
$ top -bn1 | head -8
top – 10:13:54 up 46 min, 0 user, load average: 1.14, 1.63, 2.41
Tasks: 3 total, 1 running, 2 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 1.9 sy, 0.0 ni, 98.1 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 11963.1 total, 7147.8 free, 1217.1 used, 4147.0 buff/cache
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 10746.1 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 4032 3024 2784 S 0.0 0.0 0:00.02 bash

実測では MiB Mem: 11963.1 total、avail Mem: 10746.1 という結果が得られました。top の「avail Mem」は free コマンドの「available」列と同じ意味で、本当に使えるメモリの目安です。

②メモリ使用量の多い順にプロセスを並べる




ubuntu@server: ~
$ ps aux –sort=-%mem | head -10
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 141 0.0 0.0 7628 3208 ? R 10:13 0:00 ps aux
root 1 0.3 0.0 4032 3032 ? Ss 10:13 0:00 bash

Webサーバーや Docker コンテナを動かしているサーバーでは、ps aux --sort=-%mem | head -10 を実行すると、どのプロセスが一番メモリを使っているかがすぐわかります。%MEM 列が高いプロセスが見つかれば、そこが改善の対象です。

③htop(カラー表示の代替コマンド)

htop は top の機能強化版で、カラー表示とキーボード操作が直感的です。ただし標準ではインストールされていません。




ubuntu@server: ~
$ sudo apt update && sudo apt install -y htop
… (インストール完了)
$ htop
(カラフルなプロセス一覧が表示される)

Ubuntu 22.04 vs 24.04 の出力の違い

意外と知られていないのですが、free や vmstat が含まれる procps パッケージは Ubuntu 22.04 と 24.04 でバージョンが大きく変わっています。

Ubuntu 22.04 vs 24.04 procps バージョン比較(実測)
Ubuntu 22.04 vs 24.04 procps バージョン比較(実測)

実際に両バージョンのコンテナで確認したところ、以下の違いが見つかりました。




Ubuntu 22.04
$ free –version
free from procps-ng 3.3.17
$ vmstat
procs ———–memory———- —swap– —–io—- -system– ——cpu—–
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 7214864 492796 3828180 0 0 74 9169 1801 2336 22 14 61 3 0



Ubuntu 24.04
$ free –version
free from procps-ng 4.0.4
$ vmstat
procs ———–memory———- —swap– —–io—- -system– ——-cpu——-
r b swpd free buff cache si so bi bo in cs us sy id wa st gu
3 0 0 7180892 492804 3831796 0 0 356 44356 8716 23 22 14 61 3 0 0

Ubuntu 24.04 の vmstat には gu(guest user CPU time)列が追加されています。KVM上のVPSでは常に 0 と表示されますが、列が増えたことで列数を数えて処理するシェルスクリプトが壊れる可能性があります。スクリプトを書く際は awk で列名を指定して取得する方法が安全です。

sysbench でメモリ帯域幅を実測する

「このサーバーのメモリは実際にどれくらい速いのか」を知りたい場合は、sysbench memory コマンドが便利です。VPS選びの参考にもなります。




ubuntu@server: ~
$ sudo apt install -y sysbench
… (インストール完了)
$ sysbench memory –memory-block-size=1M –memory-total-size=4G run
sysbench 1.0.20 (using system LuaJIT 2.1.0)
Running the test with following options: …
Total operations: 4096 (34758.37 per second)
4096.00 MiB transferred (34758.37 MiB/sec)
sysbench memory ベンチマーク結果(実測・3回平均)
sysbench memory ベンチマーク結果(実測・3回平均)

今回の実測では3回の平均スループットが 32,804 MiB/sec(約32 GB/sec)という結果でした。Run1: 34,758 MiB/sec、Run2: 34,473 MiB/sec、Run3: 29,180 MiB/sec と若干のばらつきがあります。

注意

今回の計測は Apple Silicon Mac 上の Docker Desktop(ARM64)で実行した値のため、x86_64 の VPS とは環境が大きく異なります。VPS の実測ベンチマークについてはVPS実測比較記事を参照してください。

よくあるエラーと解決策

①「free: command not found」と表示される

最小構成のDockerイメージやコンテナでは procps パッケージが入っていないことがあります。




ubuntu@server: ~
$ free -h
bash: free: command not found

$ sudo apt update && sudo apt install -y procps
procps のインストール完了
$ free -h
(正常に表示される)

②「available」の値が「total」より大きく見える場合

これは表示上の誤解です。available は buff/cache を考慮した推定値であり、物理的な空きよりも大きく見えることはほとんどありません。もし total を超えているように見えたら、数値の単位(Ki/Mi/Gi)の確認から始めてください。

③スワップが 0 と表示される




ubuntu@server: ~
$ free -h
total used free shared buff/cache available
Mem: 984Mi 512Mi 472Mi 10Mi 0B 472Mi
Swap: 0B 0B 0B

スワップ領域が設定されていない環境ではこのように表示されます。VPSの最小構成や一部のDockerコンテナでは標準でスワップが無効です。メモリが逼迫しているのにスワップが 0 の場合、OOM Killer(メモリ不足でプロセスを強制終了する機構)が発動するリスクがあります。スワップの設定については別途記事を参考にしてください。

④メモリ使用量が急増したときの確認方法




ubuntu@server: ~
$ ps aux –sort=-%mem | head -5
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
www-data 1234 5.2 45.3 2048000 890000 ? S 09:00 10:23 php-fpm: pool www
mysql 5678 1.0 8.1 800000 160000 ? Ssl 08:00 3:12 mysqld

メモリ使用量が急増した場合は ps aux --sort=-%mem でメモリ消費の大きいプロセスを特定してください。%MEM が 40〜50% を超えるプロセスがあれば、そのプロセスにメモリリークや設定ミスがある可能性が高いです。

まとめ

Ubuntuでメモリ使用量を確認するコマンドを実測データとともにまとめます。

コマンド 用途 よく使うオプション
free -h メモリ全体の概要を素早く確認 -m(MB)、-s 1 -c 5(定期更新)
cat /proc/meminfo 詳細な生データの取得・スクリプト処理 grep MemAvailable(特定フィールド)
vmstat 1 10 スワップ発生・メモリ推移の継続監視 -s(統計サマリ)
top -bn1 プロセス別メモリ使用率の確認 -o %MEM(メモリ順ソート)
ps aux --sort=-%mem メモリ使用量の多いプロセスを特定 | head -10(上位10件)
  • free -h の available 列が「実際に使えるメモリ」を表す(free 列ではない)
  • /proc/meminfo の MemAvailable が最も正確な空きメモリの指標
  • vmstat の si / so が継続して非ゼロなら即座に調査が必要
  • Ubuntu 24.04 の vmstat には gu 列が追加されており、22.04 と列数が異なる
  • スワップが使われ始めたらメモリの増設か、プロセスのチューニングを検討する
著者アイコン
著者アイコン

サーバーを長く使っていると「なぜか重い」と感じる場面が出てきます。そんなとき最初に叩くのが free -h と vmstat 1 5 です。スワップが動いていれば即アラートです。手癖にしておくといざというとき助かります。

本格的にVPSでサーバーを運用するなら、メモリだけでなくCPUやディスクI/Oのベンチマークも重要です。各VPSプロバイダーの実測スペックと料金の比較は、以下の記事で詳しくまとめています。

コメント

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