【Linux】free・uptimeでメモリと負荷を確認する方法|availableの見方・load averageはコア数で判断

【Linux】free・uptimeでメモリと負荷を確認する方法|availableの見方・load averageはコア数で判断 Linux

freeuptimeは、サーバーの「メモリ」と「負荷」の状態を確認する基本コマンドです。「サーバーが重い」「メモリが足りないかもしれない」というとき、まずこの2つで今の健康状態を把握します。ps・killdu・dfと並ぶ、サーバー管理の必須コマンドです。

ただし、どちらも数値の読み方に大きな誤解が生まれやすいコマンドです。freeでは「free(空き)」の数字だけ見て『メモリが足りない!』と早合点しがちですが、実際に見るべきはavailableです。uptimeload averageも、数字の大小だけでは判断できず、CPUのコア数と比べる必要があります。この記事では、実機のLinuxと実際に稼働中の本番サーバーのデータを使いながら、正しい読み方を整理します。

先に結論

  • free -hでメモリ状況を確認。見るべきはfreeではなくavailableです。
  • buff/cacheは必要になれば解放されるため、空きメモリとして数えてOKです。
  • uptimeで稼働時間とload average(1分・5分・15分の平均負荷)を確認します。
  • load averageはCPUコア数と比較して判断します(コア数を超え続けたら過負荷)。
  • コア数はnprocで確認。256コアならload 39でも余裕です。
  • 3つの数値の傾向(1分>15分なら悪化中、1分<15分なら回復中)も重要です。

プロセスの確認・終了はps・kill、ディスク容量はdu・df、ネットワークの状態はssもあわせて参考になります。

スポンサーリンク

freeの基本と各項目の意味

free -h(human-readable)でメモリの状況を確認します。表示される項目が多いですが、まず全体像を押さえましょう。

free -h の出力
free -h
#                total   used   free   shared  buff/cache  available
# Mem:            30Gi   391Mi   30Gi    2.0Mi      264Mi       30Gi
# Swap:          8.0Gi      0B  8.0Gi

# total      = 搭載メモリの総量
# used       = 実際に使用中
# free       = 完全に手つかずの空き(これだけ見てはいけない)
# buff/cache = ディスクキャッシュ(必要時に解放される)
# available  = 実質的に使えるメモリ(★これを見る)

実機(メモリ30GiB)でfree -hを実行すると、total(総量)・used(使用中)・free(空き)・buff/cache(キャッシュ)・available(実質使える量)が表示されました。初心者が最も誤解するのがfreeavailableの違いです。freeは「完全に手つかずのメモリ」ですが、Linuxは空いているメモリを積極的にディスクキャッシュ(buff/cache)として活用するため、freeの値は小さくなりがちです。しかしそれは「メモリ不足」ではありません。

【最重要】freeではなくavailableを見る

Linuxは空きメモリをキャッシュとして使い切るのが正常です。そのキャッシュはアプリがメモリを必要とすれば即座に解放されます。だから実質的に使えるメモリ量はavailableを見るのが正解です。

キャッシュが増えてもavailableは減らない(実証)
# 300MBのファイルを作成してディスクキャッシュを増やす
dd if=/dev/zero of=/tmp/cachetest bs=1M count=300

# 前後の比較(実測値)
#                buff/cache    available
# 作成前:          264MB        30984MB
# 作成後:          573MB        30977MB
#                 ↑約300MB増    ↑ほぼ変わらない!

# → キャッシュが300MB増えても、available はほぼ減っていない
#    = キャッシュ分は「使えるメモリ」として計算されている
buff/cacheが300MB増えてもavailableは減らない(実証)

実機で、300MBのファイルを作成してディスクキャッシュを意図的に増やし、前後の数値を比較しました。結果、buff/cacheは264MB→573MBと約300MB増えたのに対し、availableは30984MB→30977MBとほとんど変わりませんでした。これはavailableが「キャッシュを解放すれば使えるメモリ」まで含めて計算していることの明確な証拠です。つまり、キャッシュがどれだけ増えても、実質使えるメモリは減っていないのです。free(純粋な空き)の数字だけを見て「メモリが枯渇している!」と判断するのは典型的な誤解で、Linuxではキャッシュにメモリを使い切るのがむしろ効率的な正常動作です。メモリ不足を疑うべきはavailableが極端に小さくなったとき、そしてSwapusedが増え続けているときです。監視スクリプトを書くときも、freeではなくavailableを基準にしてください。

uptimeとload averageの基本

uptimeは、サーバーの連続稼働時間load average(平均負荷)を表示します。1行で状態を把握できる便利なコマンドです。

uptime の出力
uptime
# 22:56:36 up 3 min,  0 users,  load average: 3.04, 1.42, 0.53
#                ↑稼働時間              ↑1分  ↑5分  ↑15分の平均

# load average の3つの数字:
#   左から「直近1分」「直近5分」「直近15分」の平均負荷

# 生データは /proc/loadavg でも見られる
cat /proc/loadavg
# 3.04 1.42 0.53 2/224 16

実機で、意図的にCPU負荷をかけてload averageの変化を測定しました。負荷をかける前は0.00, 0.00, 0.00でしたが、8つのプロセスでCPUを使い続けたところ、load average: 3.04, 1.42, 0.53まで上昇しました。注目すべきは3つの数値の関係です。1分平均(3.04)が最も高く、5分(1.42)・15分(0.53)と小さくなっているのは、「負荷が最近になって急に上がった」ことを示します。逆に1分<15分なら「負荷は収まりつつある」と読めます。この3つの数字の傾向から、問題が悪化中か回復中かを判断できます。

【最重要】load averageはCPUコア数と比較する

load averageで最も誤解されるのが、「数字が大きい=危険」ではないことです。load averageは「実行待ちを含む処理の数」を表すため、CPUのコア数と比較して初めて意味を持ちます

コア数との比較で判断する
# CPUコア数を確認
nproc
# 16

# load average 3.04 / 16コア → 余裕(コアの2割程度しか使っていない)
# load average 20   / 16コア → 過負荷(待ちが発生している)

# 目安:
#   load average < コア数     … 余裕あり
#   load average ≒ コア数     … ちょうど使い切っている
#   load average > コア数     … 処理待ちが発生(過負荷)
256コアのサーバーはload 39でも余裕(本番実測)

実際に稼働している本番サーバー(共用レンタルサーバー)の状態を確認したところ、load average: 39.62, 37.83, 37.76という数値でした。「39」という数字だけ見ると非常に高く見え、パニックになりそうです。しかし同じサーバーでnprocを実行するとCPUコア数は256でした。256コアに対して負荷39は、全体の約15%にすぎず、まったく余裕がある健全な状態です。さらにメモリもtotal 1.5Tiに対しavailable 1.5Tiと潤沢でした。もしこれが1コアのサーバーでload 39なら深刻な過負荷ですが、コア数が違えば意味がまったく変わります。load averageを見たら、必ずnprocでコア数を確認し、「load ÷ コア数」で判断してください。この比率が1.0を超え続けている場合に初めて「処理が追いついていない」と判断します。数字の絶対値だけで慌てないことが、正しいサーバー監視の第一歩です。

スワップとメモリ不足の兆候

freeSwapも重要です。スワップは「メモリが足りないときにディスクへ退避する領域」で、ここが使われ始めたら、メモリ不足のサインです。

スワップの確認
free -h
# Swap:  8.0Gi   0B   8.0Gi
#                ↑ used が 0 なら、メモリは足りている

# メモリ不足のサイン:
#   1. available が極端に少ない
#   2. Swap の used が増え続けている
#   3. サーバーの応答が遅い(スワップは非常に遅い)

# 生データ
head -3 /proc/meminfo
# MemTotal:    32444052 kB
# MemFree:     31754404 kB
# MemAvailable: 31720672 kB

実機のSwapused 0Bで、メモリに余裕がありスワップを使っていない健全な状態でした。スワップはディスク上の領域なので、メモリに比べて桁違いに遅いです。そのためスワップが常用され始めると、サーバーの応答が急激に悪化します。「メモリ不足かどうか」は、availableが極端に少ない+Swapusedが増え続けているという2つのサインで判断してください。より詳細な数値は/proc/meminfoMemAvailableなど)で確認できます。

主な書き方一覧

freeuptimeの要点をまとめます。

コマンド / 項目 意味
free -h メモリ状況(読みやすい単位)
available 実質使えるメモリ(これを見る)
buff/cache ディスクキャッシュ(必要時に解放)
uptime 稼働時間とload average
load average 1分・5分・15分の平均負荷
nproc CPUコア数(loadの判断基準)

よくある失敗

freeの数字だけ見てメモリ不足と判断する

Linuxはキャッシュにメモリを使い切ります。availableを見てください。

load averageの絶対値で慌てる

コア数と比較しないと意味がありません。nprocで確認します。

3つのload値の違いを意識しない

1分>15分なら悪化中、1分<15分なら回復中と読み取れます。

スワップ使用に気づかない

Swapのusedが増え続けているのは深刻なメモリ不足のサインです。

buff/cacheを無駄と考える

キャッシュはディスクアクセスを高速化する有用な仕組みで、必要時に解放されます。

よくある質問

Qfreeコマンドでどの数字を見ればいいですか?
Aavailable(実質的に使えるメモリ)を見てください。free(純粋な空き)は、Linuxがディスクキャッシュにメモリを活用するため小さくなりがちですが、それはメモリ不足ではありません。実機でも、キャッシュが300MB増えてもavailableはほとんど減らないことを確認しています。キャッシュは必要になれば即座に解放されるためです。
Qload averageはいくつなら危険ですか?
A絶対値では判断できません。CPUのコア数と比較する必要があります。nprocでコア数を確認し、load averageがコア数を超え続けている場合に過負荷と判断します。実際の本番サーバーでは、load average 39.62でもCPUが256コアあるため、全体の約15%で余裕がある健全な状態でした。1コアでload 39なら深刻ですが、コア数次第で意味が変わります。
Qload averageの3つの数字は何ですか?
A左から「直近1分」「直近5分」「直近15分」の平均負荷です。実機で負荷をかけたところ、3.04, 1.42, 0.53のように1分平均が最も高くなりました。これは負荷が最近上がったことを示します。逆に1分の値が15分より小さければ、負荷は収まりつつあると読めます。傾向を見ることで、問題が悪化中か回復中か判断できます。
Qbuff/cacheが大きいのはメモリの無駄ですか?
A無駄ではありません。Linuxは空いているメモリをディスクキャッシュとして活用し、ファイルアクセスを高速化します。このキャッシュはアプリケーションがメモリを必要とすれば即座に解放されるため、実質的な空き容量であるavailableには含まれています。キャッシュが多いのは、メモリを有効活用できている良い状態です。
Qメモリ不足はどう判断すればいいですか?
A2つのサインを見ます。1つはavailableが極端に少なくなること、もう1つはSwapusedが増え続けることです。スワップはディスク上の領域で非常に遅いため、常用され始めるとサーバーの応答が急激に悪化します。実機ではSwapのusedが0Bで、メモリに余裕がある健全な状態でした。

まとめ

  • free -hではfreeではなくavailableを見ます。
  • buff/cacheは必要時に解放されるため、増えていても問題ありません。
  • uptimeのload averageは1分・5分・15分の平均で、傾向が読めます。
  • load averageはnprocのコア数と比較して判断します。
  • メモリ不足のサインはavailableの枯渇+Swap使用の増加です。

freeuptimeは、サーバーの健康診断を一瞬で行えるコマンドです。「メモリはavailable」「負荷はコア数と比較」——この2つの原則さえ押さえれば、数字に振り回されず的確に状態を判断できます。ps・killで重いプロセスを特定し、du・dfでディスクも確認して、サーバーを健全に保ちましょう。