インフラ作業支援ラボInfra Support Lab ← ガイド一覧← 戻る

Linuxメモリ不足・高負荷の確認手順|free・top・vmstat・ps・OOM

Linuxが重い、CPU使用率が高い、メモリ不足が疑われるときに、負荷・メモリ・swap・プロセス・OOMログを順番に確認して原因を切り分けます。

このページの目的

「サーバーが重い」をCPUだけの問題と決めつけず、load average、CPU、メモリ、swap、I/O待ち、個別プロセス、OOMのどこに異常があるかを分けて確認します。

最初にやること

uptime、free -h、topで全体像を確認し、継続観測が必要ならvmstat 1 5、原因プロセスの候補はpsで絞ります。

このページの担当:CPU・メモリ・swap・load average・OOMを中心とした性能低下と資源不足の切り分けです。ディスク容量不足やネットワーク疎通障害は専用ガイドへ分けています。

最短の確認順

# 1. 稼働時間とload average uptime # 2. メモリとswapの全体像 free -h # 3. CPU・メモリをリアルタイム確認 top # 4. 1秒間隔で5回、CPU・run queue・swap・I/Oを観測 vmstat 1 5 # 5. RSSの大きいプロセスを確認 ps -eo pid,ppid,user,comm,%cpu,%mem,rss,vsz --sort=-rss | head -20 # 6. OOMやカーネル側のメモリ異常を確認 journalctl -k -b | grep -Ei 'oom|out of memory|killed process'

最初からプロセス停止やキャッシュ削除をせず、全体負荷 → メモリ → CPU → swap/I/O → 個別プロセス → OOMログの順で事実を残します。

数字を1回だけ見て断定しない:負荷は瞬間値で変わります。障害時刻、通常時の基準値、継続時間を合わせて判断してください。

1. uptimeでload averageを確認する

uptime

uptimeには1分・5分・15分のload averageが表示されます。load averageはCPU使用率そのものではなく、Linuxでは実行可能状態のタスクに加えて割り込み不能スリープ中のタスクも含むため、CPUだけでなくI/O待ちなどでも上がることがあります。

CPUコア数だけで機械的に正常・異常を決めない:コア数との比較は目安になりますが、同じloadでもCPU飽和、I/O待ち、短時間のバーストで意味が変わります。topやvmstatと組み合わせます。

2. freeでメモリ使用量を確認する

free -h cat /proc/meminfo | head -20

free -hではtotal、used、free、buff/cache、available、swapを確認します。Linuxは空きRAMをキャッシュにも利用するため、free列が小さいだけでメモリ不足とは判断しません。対応している環境ではavailableを、swapやOOMの有無と合わせて見ます。

見る項目確認のポイント
available新しいアプリが利用できるメモリ量の目安。極端な低下が継続していないか確認
buff/cacheファイルキャッシュ等を含む。大きいだけで異常とは限らない
Swap使用中かどうかだけでなく、実際にswap in/outが継続しているかをvmstatで確認

3. topでCPU・メモリ・プロセスを確認する

top

topではCPU全体、load average、メモリ、swap、各プロセスを同時に確認できます。CPU使用率が高い場合でも、us・sy・waなど、どこで時間を使っているかを分けます。

topの項目やキー操作は実装・バージョンで差があります。共有時は画面だけでなくコマンドや時刻も記録します。

4. vmstatで継続的な状態を確認する

vmstat 1 5

vmstatはrun queue、メモリ、swap、I/O、CPU状態を時系列で確認するのに便利です。最初の行は起動後平均などを反映する場合があるため、1秒間隔などで複数回取得した後続行を中心に見ます。

代表項目見るポイント
r実行待ちタスクの目安。継続して増えているか
si / soswap in / swap out。継続的に値が出ているか
waI/O待ち時間の割合。高止まりしていないか
us / sy / idユーザー、システム、idleのCPU時間

5. swap使用状況を確認する

swapon --show free -h vmstat 1 5

swapが使われていること自体は即異常ではありません。過去に退避されたページが残っているだけの場合もあります。vmstatのsi/soが継続して発生している、応答時間が悪化している、availableが低い、といった複数の材料で判断します。

調査目的でswapを無効化しない:swapoffはRAMへページを戻すため、余裕のない環境では状況を悪化させる可能性があります。実施前に影響と空きメモリを確認してください。

6. CPU・メモリを使っているプロセスを絞る

# RSSが大きい順 ps -eo pid,ppid,user,comm,%cpu,%mem,rss,vsz --sort=-rss | head -20 # CPU使用率が高い順 ps -eo pid,ppid,user,comm,%cpu,%mem,rss,vsz --sort=-%cpu | head -20

RSSはそのプロセスが現在RAM上に持つメモリ量を見る材料ですが、共有ページなどがあるため、単純合計だけで実消費量を断定しないようにします。プロセス名だけでなくPID、実行ユーザー、起動時刻、ログ、親プロセスも確認します。

いきなりkillしない:高使用率が正常なバッチや一時処理の場合もあります。停止前にサービス影響、冗長化、再起動方式、ログ採取を確認してください。

7. OOM Killerが動いたか確認する

journalctl -k -b | grep -Ei 'oom|out of memory|killed process' # 前回起動で疑う場合 journalctl -k -b -1 | grep -Ei 'oom|out of memory|killed process' # journalが使えない環境ではカーネルログも確認 dmesg | grep -Ei 'oom|out of memory|killed process'

プロセスが突然終了した場合は、OOM Killerによる終了を確認します。OOMログがあれば「メモリ不足だった」で終わらず、どのcgroup・プロセス・制限下で起きたか、直前のメモリ推移、サービス設定を合わせて確認します。

コンテナ環境では範囲に注意:ホスト全体に空きがあっても、コンテナやcgroupのメモリ上限でOOMが発生する場合があります。Kubernetes等ではPodのlimitやイベントも確認します。

8. 既存環境・古いツールで確認するとき

メモリ・負荷調査ではコマンド名そのものが大きく置き換わった領域ではありませんが、procps/procps-ngやカーネルの世代で表示項目が異なることがあります。新しい表示だけを前提にせず、利用環境の出力に合わせます。

確認現在よく使う例既存環境での注意
メモリ全体free -h-hやavailableがない古い環境ではfree -mと/proc/meminfoを併用
負荷・プロセスtop / ps列名・並び・sort対応が異なる場合があるためmanや--helpで確認
過去の傾向監視基盤・sarsarはsysstatの導入・事前収集が必要。未収集の過去データは後から取得できない
free --version 2>/dev/null || true ps --version 2>/dev/null || true uname -r cat /etc/os-release

古い環境だからコマンドを排除するのではなく、「その環境で何が取得できるか」を確認して読み替えるのがこのサイトの方針です。

確認結果から次へ進む

確認結果次の調査
CPUのusが高く特定プロセスが突出アプリログ、処理内容、スレッド数、直前の変更を確認
syが高いシステムコール、ネットワーク、ストレージ、カーネル側の負荷を追加調査
waが高いディスクI/Oやストレージ遅延を調査。容量不足とは別問題として確認
available低下+swap in/out継続メモリ需要、プロセスRSS、cgroup制限、swap設計を確認
OOMログあり対象PID/cgroup、メモリ上限、直前の増加、再発条件を確認
負荷は正常だが接続だけ遅いLinuxネットワーク疎通・接続確認へ
ディスク容量が逼迫Linuxディスク使用量確認へ

公式・一次資料

ログ・ディスク・ネットワークも切り分ける

高負荷の原因がメモリ以外にある場合は、ログ、容量、ネットワークの専用ガイドで続けて確認できます。

ガイド一覧へ