こんにちは、インフラエンジニアのryuです。
Linuxサーバーの動きが遅い。 メモリ使用率が高く見えるけれど、本当に不足しているのか分からない。
そんなことはありませんか。
Linuxのメモリを確認するときは、free、top、psを使います。
ただし、usedの数字が大きいだけで、すぐにメモリ不足と判断してはいけません。
この記事では、Linuxのメモリ使用状況を確認する方法と、メモリ不足が疑われる場合の調査手順を初心者向けに解説します。
Linuxのメモリ使用率を確認する3つのコマンド¶
Linuxでメモリを確認するときは、目的によってコマンドを使い分けます。
| コマンド | 確認できること |
|---|---|
free -h |
サーバー全体のメモリとSwap |
top |
メモリの変化とプロセスの状態 |
ps |
メモリを多く使うプロセスの一覧 |
最初はfree -hでサーバー全体を確認します。
不足が疑われる場合は、topやpsでどのプロセスが使用しているのか調べましょう。
freeコマンドでメモリ全体を確認する¶
まずは、以下のコマンドを実行します。
free -h
-hを付けると、GiBやMiBなど読みやすい単位で表示されます。
total used free shared buff/cache available
Mem: 7.7Gi 4.8Gi 420Mi 210Mi 2.5Gi 2.4Gi
Swap: 2.0Gi 120Mi 1.9Gi

主な項目は以下の通りです。
| 項目 | 意味 |
|---|---|
total |
利用できる物理メモリの合計 |
used |
使用中として計算されたメモリ |
free |
まったく使われていないメモリ |
shared |
主に共有メモリで使われる量 |
buff/cache |
バッファやページキャッシュ |
available |
新しい処理に利用できると推定される量 |
Swap |
ディスク上に用意された退避領域 |
メモリ不足を判断するときは、freeだけでなくavailableを確認することが重要です。
freeが少なくてもメモリ不足とは限らない¶
Linuxは、空いているメモリをファイルのキャッシュなどに利用します。
そのため、長く動いているサーバーではfreeが少なく、buff/cacheが大きくなることがあります。
キャッシュは、アプリケーションがメモリを必要としたときに再利用できます。
freeが少ないだけで、キャッシュを削除したりサーバーを再起動したりする必要はありません。
確認するときは、availableが継続的に少なくなっていないか、Swapが急増していないかを見ます。
メモリ使用率を計算する¶
監視ツールの数字と比較したい場合は、利用可能なメモリを基準に計算できます。
メモリ使用率 = (total - available) ÷ total × 100
例えば、合計が8GiB、availableが2GiBなら、おおよその使用率は75%です。
ただし、監視サービスによって計算方法が異なるため、同じサーバーでも数字が一致しないことがあります。
topコマンドで変化を確認する¶
topは、サーバー全体とプロセスの状態をリアルタイムに表示します。
top

画面上部には、メモリ全体の状態が表示されます。
MiB Mem : 7890.0 total, 420.0 free, 4950.0 used, 2520.0 buff/cache
MiB Swap: 2048.0 total, 1928.0 free, 120.0 used

画面下部には、プロセスごとの情報が表示されます。
特に確認したい項目は以下です。
| 項目 | 意味 |
|---|---|
PID |
プロセスID |
USER |
実行しているユーザー |
RES |
現在使用している物理メモリ |
%MEM |
物理メモリに対する使用割合 |
COMMAND |
プロセス名 |
topを起動した状態でMを押すと、メモリ使用量の大きい順に並べ替えられます。
qを押すと終了します。
VIRTとRESの違い¶
topでは、VIRTが非常に大きく表示されることがあります。
VIRTは、そのプロセスが利用できる仮想アドレス空間を含むため、実際に同じ量の物理メモリを使っているとは限りません。
実際の物理メモリ使用量を確認するときは、まずRESを見ます。
ただし、共有ライブラリなどもあるため、複数プロセスのRESを単純に合計しても、サーバー全体の使用量とは一致しません。
psコマンドでメモリを使うプロセスを探す¶
psは、実行した時点のプロセス情報を一覧表示します。
ps aux

メモリ使用率が高い順に並べる場合は、以下のように実行します。
ps aux --sort=-%mem | head
物理メモリの使用量で並べたい場合は、rssを指定できます。
ps -eo pid,user,%mem,rss,comm --sort=-rss | head
RSSは通常KiB単位で表示されます。
特定のプロセスを探す場合は、pgrepを使うと分かりやすいです。
pgrep -a nginx
grepを使う場合は、検索用のgrepプロセス自体も表示されることがあります。
psコマンドについては、Linuxのpsコマンドでプロセスを確認する方法でも解説しています。
メモリ不足か判断するポイント¶
メモリ不足は、1回の使用率だけでは判断できません。
私は、次の項目を組み合わせて確認します。
| 確認項目 | 注意する状態 |
|---|---|
available |
継続的に少ない |
| Swap使用量 | 短時間で増え続ける |
プロセスのRES |
特定プロセスだけ増え続ける |
| 処理速度 | 応答時間や操作が明らかに遅い |
| OOMログ | プロセスが強制終了されている |
| 発生時刻 | リリースやアクセス増加と重なる |
使用率が90%でも、availableが確保され、処理に問題がなければ、すぐに障害とは限りません。
反対に、使用率がそれほど高く見えなくても、短時間で増加している場合は注意が必要です。
Swapが使われている場合の見方¶
Swapは、物理メモリだけでは足りないときなどに使われるディスク上の領域です。
現在の状態はfree -hで確認できます。
free -h
Swapを使っているだけで、すぐに異常とは限りません。
過去に退避されたデータが残っている場合もあるからです。
ただし、Swapへの読み書きが頻繁に発生すると、物理メモリより遅いため、サーバーの応答へ影響することがあります。
リアルタイムの動きを見る場合は、vmstatを使います。
vmstat 1
siはSwapからメモリへ読み込まれた量、soはメモリからSwapへ書き出された量です。
これらが継続して大きい場合は、メモリ不足を疑います。
OOM Killerが動いていないか確認する¶
物理メモリとSwapが不足すると、Linuxカーネルがプロセスを終了させることがあります。
この仕組みをOOM Killerと呼びます。
ログは、次のように確認できます。
sudo journalctl -k | grep -i -E 'out of memory|oom|killed process'
または、dmesgを使います。
sudo dmesg -T | grep -i -E 'out of memory|oom|killed process'
Killed processなどが表示された場合は、対象プロセス、発生時刻、直前のメモリ状況を確認します。
プロセスが停止していたからといって、すぐに手動で起動するだけでは、再びメモリ不足になる可能性があります。
Linuxのメモリ使用率が高いときの対処方法¶
原因を調べる前に、キャッシュ削除、プロセス終了、再起動を行うのはおすすめしません。
障害発生時の情報が消えたり、サービスへの影響が広がったりする可能性があります。
まず、free、top、ps、ログの結果を記録します。
そのうえで、次のように原因に合わせて対応します。
特定のプロセスが増え続けている¶
メモリリークや、想定以上のデータを読み込んでいる可能性があります。
アプリケーションログ、リクエスト数、リリース内容を確認します。
緊急時に再起動する場合も、作業前にPID、メモリ量、ログを残しましょう。
アクセス増加でメモリが不足している¶
同時処理数やワーカープロセス数を確認します。
クラウド環境なら、インスタンスのサイズ変更や台数追加も選択肢ですが、原因を確認せず性能だけ上げるとコストが増え続けます。
不要なサービスが動いている¶
使用していないサービスがメモリを消費している場合があります。
ただし、プロセス名だけで不要と判断せず、システムでの役割を確認してから停止してください。
障害対応の進め方は、インフラの障害対応で最初にやるべきことでも解説しています。
エンジニア歴10年で意識していること¶
エンジニアとして10年以上サーバーを見てきましたが、メモリ使用率が高いという理由だけで再起動することはありません。
まず、いつから増えたのか、何のプロセスが増えたのか、サービスへ影響が出ているのかを確認します。
一時的な処理で増えたのか、時間とともに増え続けているのかでも判断は変わります。
数字の高さより、変化と影響を見ることが大切です。
Linuxのメモリ確認方法まとめ¶
Linuxのメモリ全体は、以下のコマンドで確認できます。
free -h
リアルタイムの変化はtop、メモリを多く使うプロセスはpsで確認します。
top
ps aux --sort=-%mem | head
freeが少ないだけでメモリ不足とは限りません。
available、Swapの増加、プロセスのRES、OOMログ、サービスへの影響を組み合わせて判断しましょう。
Linuxサーバーの運用を学びたい方へ¶
InfraAcademyでは、ブラウザ上のLinux環境でコマンドを実行しながら学習できます。
基本操作から始めたい方は、Linux入門講座を確認してみてください。
プロセス、ログ、サービス管理まで学びたい方は、Linux中級講座がおすすめです。