Linuxシステムを安定して運用するためには、システムのメモリ使用状況を正確に把握することが不可欠な要素となります。
Bashプロンプトから実行できる様々なコマンドを活用することで、システム全体の空き容量から、特定のプロセスが消費している詳細なメモリ量までを迅速に調査することが可能です。
現代のLinux管理においては、単に「空いているか」を確認するだけでなく、バッファやキャッシュの挙動を理解した上で、適切なリソース配分を行うスキルが求められます。
本記事では、2026年現在の標準的なツールから応用的な解析手法まで、具体的なコマンド例を交えて詳しく紹介します。
freeコマンドによる基本確認
Linuxでメモリ使用量を確認する際に、最も基本かつ最初に使用すべきなのがfreeコマンドです。
このコマンドは、システム全体の物理メモリおよびスワップ領域の状況を一目で把握するために設計されています。
freeコマンドの主要オプション
freeコマンドには、表示形式を変更するための便利なオプションがいくつか用意されています。
最も頻繁に利用されるのは、単位を自動的に調整して読みやすくする「-h(human-readable)」オプションです。
# 人間が読みやすい形式で表示する
free -h
total used free shared buff/cache available
Mem: 15Gi 2.4Gi 8.2Gi 125Mi 4.9Gi 12Gi
Swap: 2.0Gi 0B 2.0Gi
この他にも、指定した秒数ごとに繰り返し実行する-sオプションや、合計値を表示する-tオプションなども、トラブルシューティングの際に役立ちます。
出力項目の詳細な意味
freeコマンドの結果を正しく解釈するためには、各列の意味を正確に理解しておく必要があります。
特に、一見すると空きメモリ(free)が少なく見えても、実際にはシステムが快適に動作しているケースが多いからです。
| 項目 | 説明 |
|---|---|
| total | システムに搭載されている物理メモリの総量。 |
| used | 現在使用されているメモリの量(total – free – buff/cache)。 |
| free | 全く使用されていない未使用のメモリ量。 |
| shared | 複数のプロセス間で共有されているメモリ量(tmpfsなど)。 |
| buff/cache | カーネルがディスクI/Oの高速化などのために利用している一時的な領域。 |
| available | スワップを発生させずに、新しいアプリケーションが利用可能なメモリの推定値。 |
実質的な空き容量を確認する場合は「free」ではなく「available」の値を参照するのが鉄則です。
Linuxカーネルは、空いているメモリを積極的にキャッシュ(buff/cache)として利用しますが、必要に応じて即座に解放されるため、これらは実質的な空き領域とみなすことができます。
/proc/meminfoによる詳細情報の取得
freeコマンドなどのツールは、実は/proc/meminfoという仮想ファイルから情報を取得しています。
より詳細な、あるいは生に近いデータを確認したい場合は、直接このファイルをcatコマンドなどで表示させることが有効です。
# メモリ情報の生データを確認する
cat /proc/meminfo
MemTotal: 16394532 kB
MemFree: 8452120 kB
MemAvailable: 13245184 kB
Buffers: 214532 kB
Cached: 4567120 kB
SwapCached: 0 kB
Active: 3214560 kB
Inactive: 2451232 kB
...
ここには、Active/Inactiveメモリの区別や、カーネルが管理するスラブ(Slab)情報の詳細などが数多く含まれています。
通常の運用で全てを把握する必要はありませんが、特定のメモリリークが疑われる場合や、高度なチューニングを行う際には不可欠な情報源となります。
topおよびhtopによるリアルタイム監視
システムが現在どのような負荷状況にあるかを動的に把握するには、topコマンドが標準的です。
topを実行すると、画面上部にシステム全体のメモリ統計が表示され、その下にプロセスごとの使用率が一覧表示されます。
# topコマンドを起動する
top
表示中に「M」キーを押下することで、プロセスをメモリ使用量の多い順にソートすることが可能です。
さらに視認性を高めたい場合は、多くのディストリビューションで利用可能なhtopの導入を推奨します。
# htopコマンドを起動(インストールが必要な場合があります)
htop
htopはグラフ表示が採用されており、メモリの消費状況が視覚的にわかりやすく、マウス操作やファンクションキーによるプロセス操作も可能です。
リソース監視の第一歩として、htopの画面を常に眺めておくことはシステム特性を理解する上で非常に有効です。
プロセスごとのメモリ使用量特定
システム全体のメモリが不足している原因を特定するには、個別のプロセスがどれだけメモリを消費しているかを調べる必要があります。
Bash上では、psコマンドを駆使して柔軟なフィルタリングやソートを行う手法が一般的です。
psコマンドによるソート
以下のコマンドを使用すると、システム内で動作している全プロセスの中から、メモリ使用率(%MEM)の高い順にトップ10を表示できます。
# メモリ使用率が高い順に10件表示する
ps aux --sort=-%mem | head -n 11
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
mysql 1234 0.5 12.4 2564320 1015600 ? Ssl May10 15:20 /usr/sbin/mysqld
www-data 5678 0.1 4.2 856400 345120 ? Sl May11 2:10 /usr/bin/php-fpm
...
ここで注目すべきは、「RSS(Resident Set Size)」という項目です。
これは、そのプロセスが実際に物理メモリ上に保持しているデータ量を示しており、メモリ不足の犯人を特定する際の最も重要な指標となります。
対して「VSZ(Virtual Size)」は仮想メモリの総量であり、実際に物理メモリを消費していない領域も含まれるため、混同しないよう注意が必要です。
pmapによる特定プロセスのメモリマップ確認
特定のプロセスの内部でどのようにメモリが割り当てられているかを詳しく調べたい場合は、pmapコマンドが役立ちます。
PIDを指定することで、スタック、ヒープ、共有ライブラリなどがどのメモリアドレスに配置されているかを出力します。
# 特定のプロセスID(PID)のメモリマップを表示する
pmap -x 1234
この情報は、アプリケーション開発者やシステムプログラマーがメモリリークの箇所を特定する際などに重宝されます。
vmstatによるメモリとシステム負荷の相関
メモリの状況を「時系列」で観察したい場合には、vmstatコマンドが適しています。
このコマンドはメモリだけでなく、CPU負荷やディスクI/O、コンテキストスイッチの回数などをまとめて報告してくれます。
# 2秒間隔でメモリとシステムの状況を表示する
vmstat 2
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 8452120 214532 4567120 0 0 5 12 150 240 2 1 97 0 0
ここで特に監視すべきは、swapセクションの「si(swap-in)」と「so(swap-out)」です。
もしこれらの数値が継続的に発生している場合、物理メモリが決定的に不足しており、ディスクとの間で頻繁にデータの入れ替え(スラッシング)が起きていることを示します。
スラッシングが発生するとシステムのパフォーマンスは著しく低下するため、早急なメモリ増設やプロセス構成の見直しが必要なサインとなります。
メモリ使用率を監視するBashスクリプト
手動でコマンドを打つだけでなく、定期的にメモリ状況をチェックし、一定の閾値を超えた場合に警告を発する仕組みを構築しておくと安心です。
以下は、freeコマンドの結果から現在のメモリ使用率を計算し、80%を超えた場合にメッセージを表示するシンプルなスクリプトの例です。
#!/bin/bash
# メモリ使用率を取得して閾値チェックを行うスクリプト
# 使用率の閾値(%)
THRESHOLD=80
# 現在のメモリ使用率を算出(availableベース)
# total, used, free, shared, buff/cache, available の順で並んでいることを想定
MEM_INFO=$(free | grep Mem)
TOTAL=$(echo $MEM_INFO | awk '{print $2}')
AVAILABLE=$(echo $MEM_INFO | awk '{print $7}')
# 使用率(%) = (合計 - 利用可能) / 合計 * 100
USAGE_PERCENT=$(( (TOTAL - AVAILABLE) * 100 / TOTAL ))
echo "現在のメモリ使用率: ${USAGE_PERCENT}%"
if [ $USAGE_PERCENT -gt $THRESHOLD ]; then
echo "警告: メモリ使用率が閾値 ${THRESHOLD}% を超えています。"
# ここにメール送信やログ記録の処理を追加可能
fi
このようなスクリプトをcronなどのスケジューラーに登録しておくことで、サーバーの異常にいち早く気付くことが可能になります。
現代の運用現場では、こうした自作スクリプトと監視ツールを組み合わせた自動化が一般的に行われています。
まとめ
Linuxにおけるメモリ管理は、一見複雑に思えるかもしれませんが、Bashで利用可能な強力なツール群を使いこなすことで、その実態を明快に解き明かすことができます。
まずはfree -hでシステム全体の「available」な容量を確認する習慣をつけましょう。
より詳細な分析が必要な際には、psによるプロセス別の調査や、vmstatによるスワップ発生状況の監視を組み合わせることが重要です。
また、/proc/meminfoが提供する生データを理解することで、ツールの出力結果の裏側にあるカーネルの挙動までを深く洞察できるようになります。
これらのコマンドを日常的に活用し、リソースの逼迫を未然に防ぐことで、堅牢で快適なシステム環境を維持していきましょう。
