はじめに
こんにちは!
Linuxで作業をしていると、負荷状況を知りたくなることがあります。
そこで便利なのが topコマンド。
リアルタイムにシステムの負荷状況を監視し、問題発生の予兆をいち早く察知するために欠かせないツールです。
今回は、このtopコマンドについて、基本的な見方を振り返ります。
topコマンドを実行してみる
まずは、ターミナルで top
と入力してコマンドを実行してみましょう。
$ top
すると、以下のような画面が表示されるはずです。
(環境によって表示内容は多少異なります)
Processes: 466 total, 3 running, 463 sleeping, 2579 threads
2024/07/06 19:30:44
Load Avg: 3.48, 10.31, 18.44
CPU usage: 21.73% user, 29.86% sys, 48.40% idle
SharedLibs: 239M resident, 43M data, 13M linkedit.
MemRegions: 929204 total, 3494M resident, 39M private, 527M shared.
PhysMem: 8043M used (1965M wired), 148M unused.
VM: 93T vsize, 3153M framework vsize, 220843950(0) swapins, 228894984(0) swapouts.
Networks: packets: 10609880/8494M in, 6543712/4585M out.
Disks: 37609398/2929G read, 16655199/1072G written.
PID COMMAND %CPU TIME #TH #WQ #PORTS MEM PURG CMPRS PGRP PPID STATE BOOSTS %CPU_ME %CPU_OTHRS UID FAULTS COW MSGSENT MSGRECV SYSBSD SYSMACH CSW PAGEINS IDLEW POWER INSTRS CYCLES USER #MREGS RPRVT VPRVT VSIZE KPRVT KSHRD
99878 mobileassetd 0.0 00:24.97 3 1 112 3772K 0B 3476K 99878 1 sleeping *0[348] 0.00000 0.00000 0 127311 247 3756 2068 133038 6653 94559 397 886 0.0 0 0 root N/A N/A N/A N/A N/A N/A
99437 WirelessRadioMan 0.0 00:02.01 2 1 49 1524K 0B 868K 99437 1 sleeping *0[1] 0.00000 0.00000 0 20958 207 5235 5387 62925 29647 28002 69 93 0.0 0 0 root N/A N/A N/A N/A N/A N/A
...(以下省略)...
topコマンドの見方
topコマンドの出力は、大きく分けて2つの部分で構成されています。
-
システム全体の情報:
CPU使用率、メモリ使用量、ロードアベレージ、稼働時間などのシステム全体の状態が表示されます。 -
プロセスごとの情報:
システム上で動作しているプロセスの一覧が表示されます。
CPU使用率、メモリ使用量、プロセスID、コマンド名などの情報が表示されます。
これらについて、以下で説明します。
システム全体の情報
- Processes: プロセス情報。システムで実行中のプロセスの総数と状態別の内訳を表示します。
- Load Avg: ロードアベレージ。過去の平均負荷を表示します。値が大きいほど、システムに負荷がかかっていることを示します。
CPU使用率
- CPU usage: CPU使用率。CPU時間がユーザー処理、システム処理、アイドル状態のどれに費やされているかをパーセンテージで表示します。
メモリ使用量
- SharedLibs: 共有ライブラリ。共有ライブラリが使用しているメモリ量, データセグメントサイズ, リンクエディタ使用量を表示します。
- MemRegions: メモリ領域。システム全体のメモリ領域の数と使用状況を表示します。
- PhysMem: 物理メモリ。物理メモリの使用量と空き容量、そしてワイヤードメモリの量を表示します。
仮想メモリとネットワーク
- VM: 仮想メモリ。仮想メモリのサイズ、フレームワークの仮想メモリサイズ、スワップイン/スワップアウト回数などを表示します。
- Networks: ネットワーク。送受信されたネットワークパケット数とデータ量を表示します。
ディスクI/O
- Disks: ディスクI/O。ディスクの読み込みと書き込みの回数とデータ量を表示します。
これらの情報は、システム全体のリソース使用状況を把握し、パフォーマンスのボトルネックを特定したり、システムの安定稼働を維持するために役立ちます。
プロセスごとの情報
プロセス情報:
- PID: プロセスID。各プロセスを一意に識別する番号。
- COMMAND: プロセス名。実行中のコマンドやプログラムの名前。
リソース使用率:
- %CPU: CPU使用率。そのプロセスが現在使用しているCPUリソースの割合。
- TIME: CPU時間。プロセスが開始してから使用した合計CPU時間。
スレッドとワークキュー:
- #TH: スレッド数。プロセスが使用しているスレッドの総数。
- #WQ: ワークキュー。プロセスに関連付けられているワークキューの数。
メモリ使用量:
- MEM: メモリ使用量。プロセスが現在使用している物理メモリの量。
- PURG: パージ可能メモリ。必要に応じてディスクに退避できるメモリ量。
- CMPRS: 圧縮メモリ。メモリ圧縮によって節約されたメモリ量。
プロセスグループと状態:
- PGRP: プロセスグループID。プロセスが属するプロセスグループのID。
- PPID: 親プロセスID。このプロセスを生成した親プロセスのID。
- STATE: プロセス状態。 running, sleeping, stopped, zombie など。
その他:
- BOOSTS: ブースト情報。プロセスの優先度ブーストに関する情報。
- %CPU_ME: 他プロセス起因CPU時間。他のプロセスによって消費されたCPU時間。
- %CPU_OTHRS: 自分起因CPU時間。このプロセスによって消費されたCPU時間。
- UID: ユーザーID。プロセスを実行しているユーザーのID。
- FAULTS: ページフォルト。プロセスがアクセスできなかったメモリページへのアクセス試行回数。
- COW: コピーオンライトフォルト。コピーオンライトによって発生したページフォルト数。
- MSGSENT: 送信メッセージ数。プロセスが他のプロセスに送信したメッセージの数。
- MSGRECV: 受信メッセージ数。プロセスが他のプロセスから受信したメッセージの数。
- SYSBSD: BSDシステムコール回数。プロセスが行ったBSDシステムコールの数。
- SYSMACH: Machシステムコール回数。プロセスが行ったMachシステムコールの数。
- CSW: コンテキストスイッチ回数。プロセスがCPUを他のプロセスに明け渡した回数。
- PAGEINS: ページイン回数。ディスクからメモリに読み込まれたページの数。
- IDLEW: アイドルウェイクアップ回数。プロセスがアイドル状態からウェイクアップされた回数。
- POWER: 電力使用量。プロセスが消費している電力の推定値。
- INSTRS: 命令実行数。プロセスが実行したCPU命令の数。
- CYCLES: CPUサイクル数。プロセスが消費したCPUサイクルの数。
- USER: ユーザー名。プロセスを実行しているユーザーの名前。
これらの情報は、システムの負荷状況やプロセスの動作状況を把握し、問題解決やパフォーマンスチューニングを行う際に役立ちます。
まとめ
topコマンドは、システム管理者にとって欠かせないツールで、基本的な見方をマスターするだけでも、システムの状態を把握するのに非常に役立ちます。
topコマンドを使いこなし、一システムの状態を判断できるようになりましょう!