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 行で即確認できる
目次
- 動作確認済み環境
- free コマンドで全体像を把握する
- /proc/meminfo で詳細データを読む
- vmstat でリアルタイム推移を見る
- top でプロセス別メモリを確認する
- Ubuntu 22.04 vs 24.04 の出力の違い
- sysbench でメモリ帯域幅を実測する
- よくあるエラーと解決策
- まとめ
動作確認済み環境
本記事のコマンドは以下の環境で実行・確認しています。
| 項目 | 値 |
|---|---|
| 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」といった人間が読みやすい単位で表示してくれます。このコマンドだけでメモリの大まかな状態がすぐつかめます。
total used free shared buff/cache available
Mem: 11Gi 1.2Gi 6.8Gi 334Mi 4.2Gi 10Gi
Swap: 2.0Gi 0B 2.0Gi

上記は Ubuntu 24.04 で実際に取得した出力です。各列の意味は次のとおりです。
| 列名 | 意味 | 例(実測値) |
|---|---|---|
total |
物理メモリ総量 | 11Gi |
used |
プロセスが使用中のメモリ | 1.2Gi |
free |
カーネルが未使用と管理している容量(実際に使える容量ではない) | 6.8Gi |
shared |
複数プロセスで共有されているメモリ(tmpfsなど) | 334Mi |
buff/cache |
バッファ・ファイルキャッシュ(解放可能) | 4.2Gi |
available |
新しいプロセスが実際に使える推定空き容量(最重要) | 10Gi |
正直、初学者が最もつまずくのはここです。「free が少ない = メモリ不足」ではありません。Linuxは空きメモリをファイルキャッシュとして積極的に使う設計のため、free 列は常に小さめに見えます。実際に新しいプロセスを起動できる余裕を表すのが available です。
②単位を変えて確認する
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(回数)オプションが便利です。
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 で確認します。
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

スクリプトでメモリを取得したい場合は、特定フィールドだけ grep で絞り込むのが効率的です。
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 換算して表示する
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 が定番です。
①基本的な使い方
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 の出力で注目すべき列は次のとおりです。
| 列名 | 意味 | 実測値 | 判断基準 |
|---|---|---|---|
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秒間隔で連続監視する
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 のままであれば、スワップは発生しておらずメモリには余裕があると判断できます。
③統計サマリを一覧表示する
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回だけ出力させる方法が便利です。
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」列と同じ意味で、本当に使えるメモリの目安です。
②メモリ使用量の多い順にプロセスを並べる
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 の機能強化版で、カラー表示とキーボード操作が直感的です。ただし標準ではインストールされていません。
… (インストール完了)
$ htop
(カラフルなプロセス一覧が表示される)
Ubuntu 22.04 vs 24.04 の出力の違い
意外と知られていないのですが、free や vmstat が含まれる procps パッケージは Ubuntu 22.04 と 24.04 でバージョンが大きく変わっています。

実際に両バージョンのコンテナで確認したところ、以下の違いが見つかりました。
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
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選びの参考にもなります。
… (インストール完了)
$ 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)

今回の実測では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 パッケージが入っていないことがあります。
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 と表示される
total used free shared buff/cache available
Mem: 984Mi 512Mi 472Mi 10Mi 0B 472Mi
Swap: 0B 0B 0B
スワップ領域が設定されていない環境ではこのように表示されます。VPSの最小構成や一部のDockerコンテナでは標準でスワップが無効です。メモリが逼迫しているのにスワップが 0 の場合、OOM Killer(メモリ不足でプロセスを強制終了する機構)が発動するリスクがあります。スワップの設定については別途記事を参考にしてください。
④メモリ使用量が急増したときの確認方法
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 と列数が異なる - スワップが使われ始めたらメモリの増設か、プロセスのチューニングを検討する
本格的にVPSでサーバーを運用するなら、メモリだけでなくCPUやディスクI/Oのベンチマークも重要です。各VPSプロバイダーの実測スペックと料金の比較は、以下の記事で詳しくまとめています。



コメント