freeとuptimeは、サーバーの「メモリ」と「負荷」の状態を確認する基本コマンドです。「サーバーが重い」「メモリが足りないかもしれない」というとき、まずこの2つで今の健康状態を把握します。ps・killやdu・dfと並ぶ、サーバー管理の必須コマンドです。
ただし、どちらも数値の読み方に大きな誤解が生まれやすいコマンドです。freeでは「free(空き)」の数字だけ見て『メモリが足りない!』と早合点しがちですが、実際に見るべきはavailableです。uptimeのload 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 # 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(実質使える量)が表示されました。初心者が最も誤解するのがfreeとavailableの違いです。freeは「完全に手つかずのメモリ」ですが、Linuxは空いているメモリを積極的にディスクキャッシュ(buff/cache)として活用するため、freeの値は小さくなりがちです。しかしそれは「メモリ不足」ではありません。
【最重要】freeではなくavailableを見る
Linuxは空きメモリをキャッシュとして使い切るのが正常です。そのキャッシュはアプリがメモリを必要とすれば即座に解放されます。だから実質的に使えるメモリ量はavailableを見るのが正解です。
# 300MBのファイルを作成してディスクキャッシュを増やす dd if=/dev/zero of=/tmp/cachetest bs=1M count=300 # 前後の比較(実測値) # buff/cache available # 作成前: 264MB 30984MB # 作成後: 573MB 30977MB # ↑約300MB増 ↑ほぼ変わらない! # → キャッシュが300MB増えても、available はほぼ減っていない # = キャッシュ分は「使えるメモリ」として計算されている
実機で、300MBのファイルを作成してディスクキャッシュを意図的に増やし、前後の数値を比較しました。結果、buff/cacheは264MB→573MBと約300MB増えたのに対し、availableは30984MB→30977MBとほとんど変わりませんでした。これはavailableが「キャッシュを解放すれば使えるメモリ」まで含めて計算していることの明確な証拠です。つまり、キャッシュがどれだけ増えても、実質使えるメモリは減っていないのです。free(純粋な空き)の数字だけを見て「メモリが枯渇している!」と判断するのは典型的な誤解で、Linuxではキャッシュにメモリを使い切るのがむしろ効率的な正常動作です。メモリ不足を疑うべきはavailableが極端に小さくなったとき、そしてSwapのusedが増え続けているときです。監視スクリプトを書くときも、freeではなくavailableを基準にしてください。
uptimeとload averageの基本
uptimeは、サーバーの連続稼働時間とload average(平均負荷)を表示します。1行で状態を把握できる便利なコマンドです。
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 > コア数 … 処理待ちが発生(過負荷)
実際に稼働している本番サーバー(共用レンタルサーバー)の状態を確認したところ、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を超え続けている場合に初めて「処理が追いついていない」と判断します。数字の絶対値だけで慌てないことが、正しいサーバー監視の第一歩です。
スワップとメモリ不足の兆候
freeのSwap行も重要です。スワップは「メモリが足りないときにディスクへ退避する領域」で、ここが使われ始めたら、メモリ不足のサインです。
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
実機のSwapはused 0Bで、メモリに余裕がありスワップを使っていない健全な状態でした。スワップはディスク上の領域なので、メモリに比べて桁違いに遅いです。そのためスワップが常用され始めると、サーバーの応答が急激に悪化します。「メモリ不足かどうか」は、availableが極端に少ない+Swapのusedが増え続けているという2つのサインで判断してください。より詳細な数値は/proc/meminfo(MemAvailableなど)で確認できます。
主な書き方一覧
free・uptimeの要点をまとめます。
| コマンド / 項目 | 意味 |
|---|---|
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を無駄と考える
キャッシュはディスクアクセスを高速化する有用な仕組みで、必要時に解放されます。
よくある質問
available(実質的に使えるメモリ)を見てください。free(純粋な空き)は、Linuxがディスクキャッシュにメモリを活用するため小さくなりがちですが、それはメモリ不足ではありません。実機でも、キャッシュが300MB増えてもavailableはほとんど減らないことを確認しています。キャッシュは必要になれば即座に解放されるためです。nprocでコア数を確認し、load averageがコア数を超え続けている場合に過負荷と判断します。実際の本番サーバーでは、load average 39.62でもCPUが256コアあるため、全体の約15%で余裕がある健全な状態でした。1コアでload 39なら深刻ですが、コア数次第で意味が変わります。3.04, 1.42, 0.53のように1分平均が最も高くなりました。これは負荷が最近上がったことを示します。逆に1分の値が15分より小さければ、負荷は収まりつつあると読めます。傾向を見ることで、問題が悪化中か回復中か判断できます。availableには含まれています。キャッシュが多いのは、メモリを有効活用できている良い状態です。availableが極端に少なくなること、もう1つはSwapのusedが増え続けることです。スワップはディスク上の領域で非常に遅いため、常用され始めるとサーバーの応答が急激に悪化します。実機ではSwapのusedが0Bで、メモリに余裕がある健全な状態でした。まとめ
free -hではfreeではなくavailableを見ます。buff/cacheは必要時に解放されるため、増えていても問題ありません。uptimeのload averageは1分・5分・15分の平均で、傾向が読めます。- load averageは
nprocのコア数と比較して判断します。 - メモリ不足のサインはavailableの枯渇+Swap使用の増加です。
freeとuptimeは、サーバーの健康診断を一瞬で行えるコマンドです。「メモリはavailable」「負荷はコア数と比較」——この2つの原則さえ押さえれば、数字に振り回されず的確に状態を判断できます。ps・killで重いプロセスを特定し、du・dfでディスクも確認して、サーバーを健全に保ちましょう。
- grep(文字列検索)
- find(ファイル検索)
- sed(置換・行編集)
- awk(列抽出・集計)
- cut(列の切り出し)
- chmod(パーミッション)
- tar(圧縮・解凍)
- gzip・gunzip(ファイル圧縮)
- リダイレクトとパイプ
- echo・printf(文字列出力)
- ps・kill(プロセス管理)
- free・uptime(メモリ/負荷)
- top(リアルタイム監視)
- 環境変数とPATH
- which・type(コマンドの正体)
- ln(シンボリックリンク)
- cp・mv・rm(コピー/移動/削除)
- touch・mkdir(ファイル/フォルダ作成)
- basename・dirname(パス分解)
- history(コマンド履歴)
- curl(HTTP通信・API)
- wget(ダウンロード)
- ping(疎通確認)
- dig・nslookup(DNS調査)
- ss・netstat(ポート確認)
- jq(JSON処理)
- vim(基本操作・終了方法)
- cron・crontab(定期実行)
- test・[ ](条件判定)
- read(入力の読み取り)
- date(日付・時刻)
- sort・uniq・wc(並べ替え/集計)
- xargs(一括処理)
- chown・chgrp(所有者/グループ変更)
- diff(ファイル比較)
- du・df(ディスク使用量)
- head・tail(先頭/末尾・ログ監視)
- cat・less(ファイル表示)
- alias(コマンドの別名)
- nohup(SSH切断対策)
- tmux(セッション管理)
- よく使うコマンドまとめ
- cd(ディレクトリ移動)

