はじめに
Ubuntuや各種Linuxディストリビューションの運用現場において、リソース枯渇やパフォーマンス低下の兆候を察知した際に真っ先に叩く基本コマンドが free です。本記事では、日常的なサーバー運用で欠かせない単位変換オプションの使い分けをはじめ、「free」と「available」の決定的な違い、バッファ・キャッシュ(buff/cache)のメカニズム、さらには定期ポーリングによるメモリ推移の監視手法まで、インフラエンジニアの視点から体系的に解説します。
1. メモリ状況の基本把握と視認性を高める単位指定オプション (-h, -m, -g)
システムが認識している物理RAMおよびスワップ(Swap)領域の総量、消費量、空き状況を迅速に取得できる標準ユーティリティが free コマンドです。
引数を指定せずに実行した場合はKiB(キビバイト)を基準とした数値が出力されるため、大規模なメモリを搭載した現代のサーバー環境では直感的な把握が難しい側面があります。
⚙️ [主要オプション一覧]
-b : メモリサイズをバイト(Byte)単位で出力-k : メモリサイズをキロバイト(KiB)単位で表示(デフォルト値)-m : 出力単位をメガバイト(MiB)に統一-g : 出力単位をギガバイト(GiB)に統一--mega : 2進数基準(1024)ではなく10進数基準(1MB = 1,000,000B)で換算して出力--giga : 10進数基準(1GB = 1,000,000,000B)でギガバイト換算して表示-h : システムの搭載量に応じて最適な単位記号(B, Ki, Mi, Gi, Ti)を付与する人間可読形式(Human-readable)で出力-w : バッファ(buffers)とキャッシュ(cache)を合算せず、それぞれ独立した列としてワイド表示-c [回数] : 指定したカウント数だけメモリ出力を繰り返し実行-s [秒] : 指定したインターバル(秒単位)ごとに画面を自動更新して継続表示-t : 物理メモリとスワップ領域を合算した「Total」行を末尾に追加表示

日々のトラブルシューティングで最も重宝するのが free -h です。数値を人間が直感的に理解しやすい単位(GiBやMiB)へ自動スケールしてくれるため、リソースの逼迫度合いを一目でスピーディーに判断できます。

一方、シェルスクリプトによる監視の自動化やログ解析で数値を抽出・比較したい場合は、単位表記がMiBの整数値で整然と揃う free -m を活用するのがベストプラクティスです。

2. 出力フィールドの徹底解剖:free vs availableの差異とbuff/cacheの内訳
free -h を実行した際、出力される各カラムが何を意味しているのかを正確に把握しておく必要があります。
特に誤解されやすいのが free 列です。これはカーネルやどのプロセスからも完全に手付かずで残されている「物理的な未割り当て領域」を指しています。
対して available 列は、新たなプロセスがメモリを要求した際に、バッファやページキャッシュなど解放可能な領域を即座に回収して割り当てられる「実質的な空きメモリの推定値」を示しています。
したがって、Linuxにおいて空き容量の危機的状況を評価する際は、free の値に惑わされず、必ず available の数値を基準に健全性を判断しなければなりません。

-w フラグを付与した free -h -w を実行すると、統合表示されていた buff/cache が buffers と cache に分割して表示されます。buffers は、ファイルシステムのメタデータ管理やブロックデバイスへのI/O処理を一時的に待機させるためにカーネルが確保している領域です。cache は、ストレージへのアクセス負荷を軽減し読み込みを高速化するため、過去に読み出されたファイルデータをRAM上に保持しているページキャッシュです。
いずれの領域も、新規プロセスからメモリ要求が発生したタイミングでカーネルが即座に回収・再利用するため、システムの安全なバッファゾーンとして機能しています。

これら free コマンドが表示する統計情報の元データは、仮想ファイルシステム /proc/meminfo から取得されています。head -n 10 /proc/meminfo で確認できる MemTotal、MemFree、MemAvailable、Buffers、Cached といった生データを元にコマンド側で加工・算出が行われています。メトリクスの信頼性をクロスチェックしたい場合や、より低レイヤーな挙動を追跡する際に役立ちます。

3. インターバル監視と全体合算表示 (-s, -c, -t)
物理RAMとスワップを合わせた全体的なメモリフットプリントを概観したいときは、-t オプションを加えた free -h -t が効果的です。最終行に Total 行が追加され、システム全体のリソース総枠と消費量をひと目で俯瞰できます。

リアルタイムなメモリの増減傾向をモニタリングしたい場面では、インターバル指定の -s と実行回数制限の -c を組み合わせた free -h -s 2 -c 3 が便利です。たとえば2秒おきに3回出力させることで、特定バッチ処理の起動に伴う一時的なメモリ消費のスパイクを逃さず追跡できます。

4. 疑似負荷生成ツールを用いたメモリ動的変化の検証
メモリ消費に伴うメトリクスの挙動を実際に確かめるため、システムストレステストツールである stress パッケージを環境へ導入します。

負荷をかける前のベースラインとなるメモリ状態を free -h で記録しておきます。
この時点では used が5.2GiB、純粋な空き容量 free が1.2GiB、実質的な稼働余力 available が2.0GiBとなっており、十分なリソースのゆとりが保たれていることが分かります。

続いて stress --vm 1 --vm-bytes 256M --timeout 5s を実行し、256MBのメモリ確保・解放を繰り返す仮想ワーカーを1基立ち上げ、5秒間限定でインテンシブなワークロードを発生させます。

負荷注入直後の数値を free -h で再チェックしてみましょう。
テスト前と比較すると、used は5.2GiBから5.3GiBへと微増し、これに連動して free は1.2GiBから1.0GiBへ、available も2.0GiBから1.9GiBへと減少しています。ワークロードの要求に応じて即座にメモリが確保された動的プロセスが明瞭に確認できます。

今回はLinuxサーバーにおけるメモリ監視の基本となる free コマンドの実務的な活用法と、バッファ・キャッシュの正しい読み解き方について解説しました。
本稿で取り上げた主要フラグと各カラムの本質的な意味を押さえておくことで、障害調査やキャパシティプランニングの精度を格段に引き上げることができるはずです。