InfraAcademy

InfraAcademy Blog

Linuxのメモリ使用率を確認する方法は?【top/free/psコマンドの使い方解説】

| #Linux #Linux初心者 #コマンド
Linuxをブラウザで試してみる

Linux・ネットワーク・AWSを、環境構築なしで実践学習できます

こんにちは、インフラエンジニアのryuです。

Linuxサーバーの動きが遅い。 メモリ使用率が高く見えるけれど、本当に不足しているのか分からない。

そんなことはありませんか。

Linuxのメモリを確認するときは、freetoppsを使います。

ただし、usedの数字が大きいだけで、すぐにメモリ不足と判断してはいけません。

この記事では、Linuxのメモリ使用状況を確認する方法と、メモリ不足が疑われる場合の調査手順を初心者向けに解説します。

Linuxのメモリ使用率を確認する3つのコマンド

Linuxでメモリを確認するときは、目的によってコマンドを使い分けます。

コマンド 確認できること
free -h サーバー全体のメモリとSwap
top メモリの変化とプロセスの状態
ps メモリを多く使うプロセスの一覧

最初はfree -hでサーバー全体を確認します。

不足が疑われる場合は、toppsでどのプロセスが使用しているのか調べましょう。

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

topコマンドでCPUやメモリなど全体の状況を把握

画面上部には、メモリ全体の状態が表示されます。

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コマンドでプロセスごとのメモリ使用率を調査する

メモリ使用率が高い順に並べる場合は、以下のように実行します。

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のメモリ使用率が高いときの対処方法

原因を調べる前に、キャッシュ削除、プロセス終了、再起動を行うのはおすすめしません。

障害発生時の情報が消えたり、サービスへの影響が広がったりする可能性があります。

まず、freetopps、ログの結果を記録します。

そのうえで、次のように原因に合わせて対応します。

特定のプロセスが増え続けている

メモリリークや、想定以上のデータを読み込んでいる可能性があります。

アプリケーションログ、リクエスト数、リリース内容を確認します。

緊急時に再起動する場合も、作業前に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中級講座がおすすめです。

Next Action

記事で読んだ内容を、講座で実装してみましょう

InfraAcademyでは、ブラウザ上でLinuxやネットワークの実践環境を使いながら学習できます。無料で始められる講座から、学習の流れを試せます。

この記事を書いた人

ryu

InfraAcademy運営 / エンジニア

エンジニア歴10年。Linux、ネットワーク、クラウドを中心に、実務で役立つインフラ技術を初心者にもわかりやすく解説しています。

X: @ryu63614894

Related

関連記事

ブログ一覧へ

Roadmap

まずはこの4講座から

ログインすれば無料で始められる講座です。気になったテーマから手を動かして学べます。

講座一覧を見る