3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Linux リソース・性能監視

Last updated at Posted at 2025-07-09

はじめに

コンテキストスイッチ

CPU が実行中のプロセスを切り替えること。

コンテキストスイッチ数が増えるほど、切り替えのためのオーバーヘッドが発生している。

キャリアエラー

carrier error

NIC が物理的な信号を検出できなかった、もしくは異常な状態であったことを表す。

ケーブルの断線、スイッチポートの不良、NIC 自体の故障などが原因になる。

フレームエラー

frame error

受信した フレーム が正しい構造(フォーマット)になっていない場合に発生する。

電磁ノイズの多い環境で発生する。

オーバーラン

NIC が受信したデータを処理しきれず、受信したデータが受信用バッファである FIFO から溢れて破棄されること。

負荷が高すぎる、もしくは NIC の性能不足などが原因。

FIFO

file in file out

入力されたデータが、順番通りに出力されるキュー構造。

I / O 処理は CPU の処理と比較して桁違いに遅いため、データは一時保管用バッファに格納され CPU はバッファからデータを入出力する。

LIFO

last in first out

最後に入力されたデータが最初に取り出されるスタック構造。

$ uptime

システムの稼働時間(起動してからの経過時間)や、ログインユーザ数、負荷状況(load average) を確認する
$ uptime
実行例
$ uptime
21:20:09(現在時刻) up 21:05(稼働時間),  1 user(ログインユーザ数),  load average: 0.00, 0.00, 0.00

load average$ top コマンドと同じ。

$ top

プロセス情報、リソースの使用状況をリアルタイム表示する
$ top 
top - 21:03:57(現在時刻) up 24 min(起動後の経過時間),  1 user(ログインユーザ数),  load average(平均負荷): 0.00(1分間平均), 0.00(5分間平均), 0.00(15分間平均)
Tasks: 119 total(総プロセス数),   1 running(実行状態 or 実行可能状態), 118 sleeping(スリープ状態),   0 stopped(停止状態),   0 zombie(ゾンビ状態)

load average の数値は、CPU 使用中のために待機しているプロセス数を表す。処理のつまり具合を意味する。

【1 CPU(シングルコア) × 1 個 = 1 コアが搭載されている場合】
1.00 がフル稼働状態を意味する

【4 CPU(クアッドコア) × 2 個 = 8 コアが搭載されている場合】
8.00 がフル稼働状態を意味する

%Cpu(s)(CPU 使用時間の割合):  0.0 us(user:ユーザ),  0.0 sy(system:カーネル),  0.0 ni(nice:nice 値が変更されたプロセス),100.0 id(idle:アイドル状態),  0.0 wa(io wait:I/O 待ち),  0.0 hi(hardware irq:ハードウェア割り込み要求),  0.0 si(software irq:ソフトウェア割り込み要求),  0.0 st(steal:ゲスト OS が CPU を割り当てられなかった時間) 
略称 説明
us user
ユーザプロセスが CPU を使った時間。通常のアプリケーションなど。
sys system
カーネルが CPU を使った時間。システムコール やドライバ処理。
ni nice
nice 値が変更されたユーザプロセスの処理時間($ nice)。
id idle
アイドル時間。CPU が完全に暇な状態。
wa io wait
ディスクやネットワーク I / O 待ち時間。CPU は暇だが、I / O が終わるのを待っている状態。
hi hardware interrupt request
ハードウェア割り込み処理時間。NIC やディスクからの割り込みなど。
si software interrupt request
ソフトウェア割り込み処理時間。カーネル内部イベントなど。
st steal
仮想マシン(VM)に割り当てられたはずの CPU 時間が、実際にはホスト側で使われていて奪われた(steal)時間。0 % であれば、要求通り CPU が割り当てできている状態。
MiB Mem(メモリ) :   3902.6 total,   3445.0 free,    288.7 used,    315.3 buff/cache     
MiB Swap(スワップ):      0.0 total,      0.0 free,      0.0 used.   3613.8 avail Mem

PID(プロセス ID) USER(ユーザ名)      PR(優先度)  NI(nice 値)    VIRT(使用中の仮想メモリ)    RES(使用中の実メモリ)    SHR(共有メモリ) S(プロセスの状態)  %CPU(CPU 使用率)  %MEM(物理メモリの使用率)     TIME+(プロセス起動後の CPU 使用総時間) COMMAND(実行コマンド)
S 説明
R Running
実行中、または実行可能状態
S Sleeping
待機状態
D Uninterruptible Sleep
割り込み不可スリープ($ kill で終了できない)
T Stopped
停止中(シグナル SGISTOP などで停止された状態)
t Tracing Stop
トレース停止中
Z Zombie
ゾンビ状態
I Idle
アイドル状態
実行例
実行例
$ top
top - 20:41:33 up 2 min,  1 user,  load average: 0.02, 0.01, 0.00
Tasks: 128 total,   1 running, 127 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.1 sy,  0.0 ni, 99.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st 
MiB Mem :   3902.6 total,   3445.6 free,    290.3 used,    312.9 buff/cache     
MiB Swap:      0.0 total,      0.0 free,      0.0 used.   3612.2 avail Mem 

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                               
     60 root      20   0       0      0      0 I   0.3   0.0   0:00.05 kworker/3:1-events                                    
   1109 kei       20   0   12216   5248   3200 R   0.3   0.1   0:00.23 top                                                   
      1 root      20   0   21900  11844   8516 S   0.0   0.3   0:00.91 systemd                                               
      2 root      20   0       0      0      0 S   0.0   0.0   0:00.00 kthreadd                                              
      3 root      20   0       0      0      0 S   0.0   0.0   0:00.00 pool_workqueue_release

キー押下でインタラクティブモードに切り替えができる。

キー 動作
q quit
終了する
k kill
プロセスに kill シグナルを送信する(シグナル
u user
ユーザを指定する
d, s delay, seconds
実行間隔を指定する
f fields
表示項目を選択、変更する
o order
並べ替え対象の列を選ぶ
I idle, info
平均負荷 IRIX mode on/off を切り替える
on:CPU 数 × 100%(1 CPU 当たり 100 %)
off:最大 100%(割合)
i idle
CPU を使用中のプロセスだけを表示する(idle 状態の表示/非表示)
m memory
メモリ、スワップを表示形式を切り替える
t task, threads
プロセスと CPU 状態の表示/非表示を切り替える
M memory
メモリ使用率順に並び替える
P processor
CPU 使用率順に並び替える
T time
起動時間順に並び替える
N number
PID 順に並び替える
<, > 並び順を変更する
h, ? help
ヘルプを表示する
更新間隔を指定する(delay)
$ top -d 秒数
更新回数を指定する(number)
$ top -n 回数    # 指定回数終了後、top は自動終了
特定のユーザが起動したプロセスのみ表示する(user)
$ top -u ユーザ名
特定のプロセスのみ表示する(process)
$ top -p PID

-b をつけると、バッチモードと呼ばれる「非対話モード」で実行することができる。

対話モードでは q で実行を終了できるが、バッチモードでは Ctrl + C で終了させるしかない。

対話モードのようにインタラクティブな操作ができないため、-n と併せて使用して出力回数を指定してファイルに書き込むなどの用途で利用される。

バッチモード(batch:一括処理)で実行する
$ top -n 5 -b > ログファイル

$ free

メモリ使用量を測定する
$ free
実行例
$ free
               total        used        free      shared  buff/cache   available
Mem:         3996212      383316     1849244        5340     1960396     3612896
Swap:              0           0           0
Mem 意味
total 物理メモリの総量
used 使用中のメモリサイズ(キャッシュ、バッファ含む
free 未使用の空きメモリサイズ
shared tmpfs など共有メモリで使われているサイズ
buff/cache バッファ、キャッシュで使われているサイズ(使用後は開放可能)
available アプリケーションが新たに利用可能なメモリ量(実用上の空きメモリ

Linux では「余ったメモリはキャッシュに使う」設計になっている。そのため、used が多くてもメモリが本当に不足しているとは限らない。

そのため、実用上は available を見た方が良い。

Mem 意味
total スワップ領域の合計サイズ
used 使用中のスワップ領域
free スワップ領域の空きサイズ
見やすい単位で表示する(human readable)
$ free -h
byte 単位で表示する
$ free -b
KB 単位で表示する
$ free -k
MB 単位で表示する
$ free -m
物理メモリとスワップメモリの合計を表示する
$ free -o
繰り返し実行する間隔を指定する(seconds)
$ free -s 秒数

$ iotop

プロセスごとの I / O 情報を $ top と同じように表示する。

$ iotop

$ vmstat

vurtual memory statistics

CPU、メモリ、プロセス、スワップ、 I/O パフォーマンス状態を時系列で表示する
$ vmstat
秒間隔、出力回数を指定する
$ vmstat 秒間隔 出力回数
実行例
$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- -------cpu-------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st gu
 0  0      0 1894800 112300 1809588    0    0    52   254   79    0  0  0 100  0  0  0
項目 意味
procs r:実行待ちプロセス数(ready, runnable)
b:I / O 待ちのためブロック状態のプロセス数(blocked)。0 が理想の状態
memory
(KB)
swapd:使用中のスワップ領域(swapped)
free:空きメモリ
buff:バッファ使用中のメモリ(buffer)
cache:ページキャッシュに使用されているメモリ
swap
(KB / 秒)
siディスク(スワップ)→メモリ にスワップインされているメモリ(swap in)
soメモリ→ディスク(スワップ) へスワップアウトされているメモリ(swap out)
io
(ブロック / 秒)
biブロックデバイス からの読込み量(block in)
bo:ブロックデバイスへの書込み量(block out)
system
(回数 / 秒)
in:カーネル内の割り込み数(interrupt)
cs:コンテキストスイッチ数(context switch)
cpu
(%)
合計が 100 % になる
us:ユーザプロセスが CPU を使用している時間(user)
sy:カーネルが CPU を使用している時間(system)
id:CPU がアイドル状態の時間(idle)
wa: ディスク I / O 待ちの時間(wait)
st:他の仮想マシンに CPU を奪われていた時間(steal)

$ iostat

input output statistics

I / O 性能やディスク使用状況を調べるためのツール。

CPU の使用率、ブロックデバイスの入出力状況を確認する
$ iostat 

引数なしの場合、起動〜現在までの統計情報が表示される。引数を与えた場合、2 回目の出力以降は、前回出力との差分が表示される。

秒間隔、出力回数を指定する
$ vmstat 秒間隔 出力回数
CPU 使用率を省略してデバイス統計のみを表示する(device)
$ iostat -d
CPU 使用率のみを表示する(cpu)
$ iostat -c
パーティションを含めて表示する(partition)
$ iostat -p
KB で表示する
$ iostat -k
MB で表示する
$ iostat -m
タイムスタンプを表示する(timestamp)
$ iostat -t
実行例
$ iostat
Linux 6.8.0-62-generic (ホスト名) 	07/08/25 	_aarch64_	(4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.07    0.02    0.11    0.02    0.00   99.78

Device             tps    kB_read/s    kB_wrtn/s    kB_dscd/s    kB_read    kB_wrtn    kB_dscd
dm-0              6.58        23.20       146.25       242.12     638249    4022916    6660148
loop0             0.00         0.00         0.00         0.00         14          0          0
vda               4.51        31.05       152.19       327.21     854182    4186325    9000620
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.07    0.02    0.11    0.02    0.00   99.78

処理時間の割合(average)が表示される。合計が 100 % となる。

項目 意味
%user ユーザプロセスの CPU 使用率
%nice nice 値が変更されたプロセスの CPU 使用率
%system カーネルの CPU 使用率
%iowait I / O 待ち時間の割合
%steal 他の仮想マシンの CPU を奪われた(steal)割合
%idle アイドル状態の割合
Device             tps    kB_read/s    kB_wrtn/s    kB_dscd/s    kB_read    kB_wrtn    kB_dscd
dm-0              6.58        23.20       146.25       242.12     638249    4022916    6660148
loop0             0.00         0.00         0.00         0.00         14          0          0
vda               4.51        31.05       152.19       327.21     854182    4186325    9000620
項目 意味
Device デバイス名
tps transfer per second
1 秒あたりの I / O 転送要求回数(読み書きの合計数)
kB_read/s デバイスからの 1 秒あたりの読み込み量(KB)
kB_wrtn/s written
デバイスへの 1 秒あたりの書き込み量(KB)
kB_read デバイスからの読み込み量合計(KB)
kB_wrtn written
デバイスへの書き込み量合計(KB)

$ netstat

$ sar

system activity reporter

総合的なシステムリソースの記録・監視・レポートツール。

$ top$ iostat$ vmstat などが「リアルタイムの監視」に強いのに対し、$ sar過去の情報を分析できる という点が特徴。

sysstat パッケージから提供される(パッケージ管理)。

/var/log/sysstat/ ディレクトリ配下には定期的に $ sadc によって収集されたログが蓄積されていて、$ sar によってこのログを確認することができる。

ログを確認する
$ sar
実行例
$ sar
Linux 6.8.0-62-generic (ホスト名) 	07/08/25 	_aarch64_	(4 CPU)

00:12:00        CPU     %user     %nice   %system   %iowait    %steal     %idle
00:29:45        all      0.07      0.00      0.16      0.03      0.00     99.73
00:46:49        all      0.03      0.00      0.13      0.00      0.00     99.84
01:00:08        all      0.04      0.00      0.15      0.02      0.00     99.79
...
項目 意味
%user ユーザプロセスの CPU 使用率
%nice nice 値が変更されたプロセスの CPU 使用率
%system カーネルの CPU 使用率
%iowait I / O 待ち時間の割合
%steal 他の仮想マシンの CPU を奪われた(steal)割合
%idle アイドル状態の割合
実行例(device)
$ sar -n DEV
Linux 6.8.0-62-generic (ホスト名) 	07/08/25 	_aarch64_	(4 CPU)

00:12:00        IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
00:29:45           lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
00:29:45       enp0s1      0.98      0.99      0.05      1.07      0.00      0.00      0.00      0.00
00:46:49           lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
...
項目 意味
hh:mm:ss 観測時刻
IFACE interface
インターフェース名
rxpck/s receive package
受信パケット数(パケット / 秒)
txpck/s transmit packet
送信パケット数(パケット / 秒)
rxkB/s receive
受信パケット数(KB / 秒)
txkB/s transmit
送信パケット数(KB / 秒)
rxcmp/s rx compressed packet
圧縮された受信パケット数(パケット / 秒)
txcmp/s tx compressed packet
圧縮された送信パケット数(パケット / 秒)
rxmcst/s rx multiacst
マルチキャスト受信パケット数(パケット / 秒)
%ifuntil interface utilization
ネットワークインターフェースの帯域使用率
使用できる帯域に占める割合
実行例(extended device)
$ sar -n EDEV
Linux 6.8.0-62-generic (ホスト名) 	07/08/25 	_aarch64_	(4 CPU)

00:12:00        IFACE   rxerr/s   txerr/s    coll/s  rxdrop/s  txdrop/s  txcarr/s  rxfram/s  rxfifo/s  txfifo/s
00:29:45           lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
00:29:45       enp0s1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
00:46:49           lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
...
項目 意味
hh:mm:ss 観測時刻
IFACE interface
インターフェース名
rxerr/s receive error
受信時のエラー数(パケット / 秒)
発生時は、ネットワーク機器、ドライバの問題を疑う。
txerr/s transmit error
送信時のエラー数(パケット / 秒)
発生時は、ネットワーク機器、ドライバの問題を疑う。
coll/s collision
パケット衝突数(パケット / 秒)
rxdrop/s receive dropped
バッファ不足により破棄(取りこぼし)された「受信」パケット数(パケット / 秒)
txdrop/s transmit dropped
バッファ不足により破棄(取りこぼし)された「送信」パケット数(パケット / 秒)
txcarr/s transmit carrier error
送信時の キャリアエラー 数(パケット / 秒)
発生時には、NIC の物理層でエラーが発生している(ケーブル不良、スイッチポート接続誤り)。
txfram/s transmit frame error
送信時の フレームエラー 数(パケット / 秒)
rxfifo/s receive FIFO
受信時 FIFO の オーバーラン 数(パケット / 秒)
txfifo/s transmit FIFO
送信時 FIFO のオーバーラン数(パケット / 秒)
秒間隔、表示回数を指定する
$ sar 秒間隔 表示回数
特定のログファイルを確認する
$ sar -f ログファイル    # `/var/log/sysstat/` ディレクトリ配下のファイル
プロセスの生成回数を表示する(context switch, create process)
$ sar -c   # 私の環境では実行できませんでした

プロセスやスレッドは、システムコールfork()clone() によって生成される。

全ての統計情報を表示する(all)
# sar -A
CPU 使用率を表示する
# sar -u
Linux 6.8.0-62-generic (ホスト名) 	07/09/25 	_aarch64_	(4 CPU)

00:00:05        CPU     %user     %nice   %system   %iowait    %steal     %idle
00:10:05        all      0.14      0.13      0.11      0.02      0.00     99.60
...
メモリ使用量を表示する(RAM)
# sar -r
Linux 6.8.0-62-generic (ホスト名) 	07/09/25 	_aarch64_	(4 CPU)

00:00:05    kbmemfree   kbavail kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
00:10:05      1860116   3596964    138720      3.47    116868   1647552    257036      6.43    254648   1538084
...
ディスクの I / O 、バッファの使用状況を表示する(buffer I / O)
# sar -b
Linux 6.8.0-62-generic (ホスト名) 	07/09/25 	_aarch64_	(4 CPU)

00:00:05          tps      rtps      wtps      dtps   bread/s   bwrtn/s   bdscd/s
00:10:05         1.51      0.00      1.51      0.00      0.00    999.63      0.00
...
ブロックデバイスの統計情報を表示する(device)
# sar -d
Linux 6.8.0-62-generic (ホスト名) 	07/09/25 	_aarch64_	(4 CPU)

00:00:05          DEV       tps     rkB/s     wkB/s     dkB/s   areq-sz    aqu-sz     await     %util
00:10:05        loop0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
00:10:05          vda      1.51      0.00    499.82      0.00    330.28      0.01      3.22      0.05
...
スワップの入出力状況を表示する(swap)
# sar -w
Linux 6.8.0-62-generic (ホスト名) 	07/09/25 	_aarch64_	(4 CPU)

00:00:05       proc/s   cswch/s
00:10:05         0.88     64.68
00:20:15         0.02     48.92
...
開始時刻(start)、終了時刻(end)を指定する
# sar -s hh:mm:ss -e hh:mm:ss
ネットワークインターフェースの使用状況(送受信バイト数・パケット数など)を表示する(network device)
# sar -n DEV

$ sadf

system activity data format

$ sar で確認できるログを CSV や JSON 形式で出力することができる。

CSV 形式( ; 区切り)で出力する(delimited)
$ sadf -d
CSV 形式( , 区切り)で出力する(comma-separated)
$ sadf -c
JSON 形式で出力する
$ sadf -j
XML 形式で出力する
$ sadf -x
-- 以降のオプションを $ sar に渡す
$ sadf [sadf のオプション] -- [sar のオプション]

$ ps

$ df

ツール

Nagios

ナギオス

【できること】

  • サーバ・ネットワーク機器の死活監視ができる($ ping
  • Web サーバの応答が監視できる(HTTP ステータスを確認)
  • プロセスやサービスの稼働状態を監視できる
  • 障害検出時にメールやスクリプトで通知してくれる

【特徴】

  • オープンソース(Nagios Core)
  • 拡張性が高い(プラグインが豊富)
  • ブラウザにグラフを表示することができる
  • 異常発生時にメールでお知らせ

【利用場面】

  • サーバの稼働監視(死活、CPU 負荷、ディスク使用率)
  • 異常検出時の通知(例:Web サイトの停止、DB サーバ過負荷の検知)

MRTG

multi router traffic grapher

【できること】

  • SNMP を使ってネットワーク機器のトラフィック量を定期的に収集できる
  • 帯域使用量の推移を グラフ画像(PNG)として生成できる

【特徴】

  • Web サーバを介してグラフを HTML ページに自動出力できる

【利用場面】

  • 定期的にネットワーク機器の HTTP ポート、TCPポートにアクセスして応答をチェック

Cacti

カクティ

【できること】

  • SNMP 経由でネットワーク機器のトラフィックや稼働状況を監視できる
  • RRD(round robin database)形式のデータを介してブラウザにグラフ表示できる

【特徴】

  • Web UI が見やすくて、設定、管理がしやすい

【利用場面】

  • ルータやスイッチのインターフェース帯域使用量を可視化する
  • 日々の上り / 下り帯域の使用状況をグラフで確認する

lcinga2

アイシンガ2

ネットワークモニタリングツール
【できること】

  • ホストやサービスの死活監視ができる
  • システムリソース(CPU、メモリ、ディスク)の監視ができる

【特徴】

  • オープンソース
  • REST API による外部連携ができる

collected

コレクテッド

【できること】

  • CPU、メモリ、ディスク I / O、ネットワークなどの統計情報を定期的に収集できる
  • RRD(round robin database)や CSV などに保存、Grafana などと連携して可視化できる

【特徴】

  • 軽量なデーモンとして稼働
  • C 言語で作られている

【利用場面】

  • サーバの負荷状況を収集して、時系列のグラフを作成、Grafana で表示する
3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?