最終更新日: 2026-08-29
TOP(About this memo)) > 一覧(Linux) > リソース監視(CPU・メモリ)
プロセスそのものの操作についてはプロセス・ジョブ、ディスクの使用量についてはディスク・ファイルシステムを参照。
o を押し、さらに cpu や mem と入力すると並び替えができる。Shift-p … CPU使用率順
m … メモリ使用量順n … PID順t … 実行時間順f を押すと表示する項目を変更できる。us(ユーザープロセス)と sy(カーネル)の合計が、おおまかな使用率にあたる。id(idle)を100から引いた値を見る。wa(I/O待ち)が大きい場合はディスクがボトルネックになっている可能性がある。top - 14:49:31 up 407 days, 15:49, 0 users, load average: 5.19, 5.20, 5.27
Tasks: 332 total, 1 running, 331 sleeping, 0 stopped, 0 zombie
%Cpu(s): 31.0 us, 1.9 sy, 0.0 ni, 66.9 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st
KiB Mem : 32945628 total, 611656 free, 3485824 used, 28848148 buff/cache
KiB Swap: 1003516 total, 972920 free, 30596 used. 28554076 avail Mem
100 - 66.9 = 33.1%。total - avail Mem がおおよその実使用量にあたる。used だけを見るとキャッシュが考慮されず実態とずれる。-m や -g で単位を指定する。-h で読みやすい単位にする。total / used / free / shared / buff/cache / available という列が表示される。available を見るのが基本。これはアプリケーションが新たに利用可能なメモリの推定値で、解放可能なキャッシュを含んでいる。-/+ buffers/cache の行は、available 列の導入にともなって廃止された(procps-ng 3.3.10前後、RHELでは7.1以降)。役割としては、この行の2つ目の値が現在の available に相当する。free が小さい(buff/cache が大きい)こと自体は問題ではない。キャッシュは必要になれば解放される。vmstat 1 のように間隔(秒)を指定すると、継続的に出力される。負荷の傾向を見るにはこの使い方が便利。si / so(スワップイン・スワップアウト)が継続的に発生している場合、メモリが不足している。cat /proc/meminfo … メモリの詳細な内訳cat /proc/stat … CPUごとの累積時間、コンテキストスイッチ数などcat /proc/cpuinfo … CPUの情報MemTotal - MemFree で計算しているものがある。これはキャッシュを「使用中」として数えてしまうため、実態より大きく見える。ページキャッシュは必要になれば解放されるので、アプリケーションから見た実質的な使用量とは言えない。MemTotal - MemAvailable を使用量とみなす方が実態に近い。これは free コマンドの available 列に対応する。MemAvailable はカーネルが算出している推定値で、MemFree に加えて解放可能なページキャッシュやスラブの一部を含む。MemFree + Inactive(file) + Active(file) を単純に足した値とは一致しない。/proc/meminfo の主な項目MemTotal: 24521792 kB # 物理メモリの総量
MemFree: 380616 kB # 完全に未使用のメモリ
MemAvailable: 20517936 kB # 新たに利用可能と推定されるメモリ
Buffers: 4 kB # ブロックデバイス用のバッファキャッシュ
Cached: 20528596 kB # ページキャッシュ
SwapTotal: 12386300 kB
SwapFree: 9692140 kB
Dirty: 196 kB # ディスクへの書き戻し待ち
AnonPages: 2603280 kB # 無名ページ(プロセスのヒープ等)
Slab: 576504 kB # カーネルのデータ構造用
ab -n 100 -c 10 https://example.com/
-n(requests) 総リクエスト数-c(concurrency) 同時リクエスト数-T(content-type) POSTやPUTを行う時のContent-Typeを指定(デフォルトは text/plain)-H 追加のHTTPヘッダを指定-k Keep-Aliveを使用するab -n 100 -c 10 -p postTest.json -T "application/json" https://example.com/graphql
vmstat や top を回してリソースの推移を確認するとよい。top / vm_stat / sysctl で見てみるのもよい。top コマンドの表示項目
Load Avg: 2.28, 2.39, 2.86
MemRegions: 253907 total, 3304M resident, 154M private, 2733M shared.
PhysMem: 15G used (4566M wired), 1334M unused.
wired はカーネルによって確保され、スワップアウトできない領域。アクティビティモニタの「確保されているメモリ」に対応する(?)。VM: 3706G vsize, 2308M framework vsize, 283324954(0) swapins, 286726869(0) swapouts.
Networks: packets: 29295924/24G in, 28867267/10G out.
Disks: 228412322/4196G read, 28975599/1733G written.
vm_stat
Pages occupied by compressor が「圧縮メモリ」Pages wired down が「確保されているメモリ」top の PhysMem の used と一致するPages purgeable と File-backed pages の合計がキャッシュにあたり、「キャッシュされたファイル」に対応するsysctl で様々な値を確認できる。
sysctl -a … 全てsysctl hw.memsize … 物理メモリの総量sysctl -n hw.physicalcpu_max … 物理コア数sysctl -n hw.logicalcpu_max … 論理コア数-n は値だけを表示するオプション。