macのtopコマンドを追う

家に帰ると充電器に指しておいた愛器のMACがファンを最高スピードまでクロックアップさせながら唸りをあげていた。

なぜだ。蓋閉じてるのに。

今回はこういった漠然とした状態からコンピュータ内部でざっくり何が起こっているか判別するときに使用できるtopコマンドを掘り下げて解説しよう。

topコマンドはosx(mac)だけでなくunix実装のほとんどのディストリビューションで提供されているツールであろう。
システム全体をざっくり見るときによく用いられる。
ただこれディストリビューションによって確認できる情報や、オプションとか結構変わってくるので注意。

さてmacでterminalを立ち上げtopコマンドを打鍵すると下記のような表示が見て取れると思う。

Processes: 226 total, 4 running, 9 stuck, 213 sleeping, 1096 threads
Load Avg: 3.12, 3.16, 2.93  CPU usage: 16.81% user, 23.22% sys, 59.95% idle  SharedLibs: 9200K resident, 14M data, 0B linkedit.
MemRegions: 45374 total, 1842M resident, 59M private, 1496M shared. PhysMem: 5103M used (1685M wired), 2594M unused.
VM: 538G vsize, 1066M framework vsize, 3072256(54) swapins, 3399825(0) swapouts.  Networks: packets: 6042458/6896M in, 3543389/504M out.
Disks: 1397033/93G read, 1239425/75G written.

Load Avg: 3?何も起動してないのに。。。

表示される項目について解説する。

Processes – total

マシン上で動作しているプロセスの数

Processes – running

実行中プロセスの数
実行中となりうるプロセス数は1CPUにつき1プロセスだけである。
動作しているマシンのCPUがクアッドコアなため最大で同時に4つのプロセスが動作可能

Processes – stuck

そもそもstuckとは?
osxのtopコマンドにおけるstuckとはプロセスの状態がLIBTOP_STATE_STUCKとなっている状態のプロセス数である。
またカーネルの状態としてはTH_STATE_UNINTERRUPTIBLEであることを指す。
これはプロセスが割り込み不可能なwait状態であることを指す。
通常はディスクやネットワークに対するI/O待ちのような状態が該当する。

Processes – sleeping

wait状態のプロセスの数を表す。

Processes – threads

スレッドの数を表す。

Load Avg

ロードアベレージとは実行キューの中に入っている平均ジョブ数を表す。
(これはosxの定義であってディストリビューションによって算出方法は多少異なることもある)
3つの数値が並んでいるがこれは左から、1分平均、5分平均、15分平均を表す。

CPU usage – user

ユーザ実行時間を表す。ユーザ時間とはアプリケーションレイヤでカーネル処理(システムコール)に費やされている時間以外の時間のことを指す。
例えばアプリケーション中でシステムコールを利用している場合、その間はシステム時間として認識される。

CPU usage – system

システム実行時間を表す。アプリケーションやOSによりシステムコールに費やされている時間を表す。

CPU usage – idle

アイドル時間を表す。

SharedLibs – resident

メモリに常駐している共有メモリを表す。

SharedLibs – data

データ領域を表す。

SharedLibs – linkedit

MemRegions – total

使用メモリサイズ。単位はmach virtual memory。

MemRegions – resident

常駐メモリのサイズ

MemRegions – private

非共有メモリのサイズ

MemRegions – shared

共有メモリのサイズ

PhysMem – used

使用中の物理メモリサイズ
wiredという表記があるが、これはos kernelによって使用されていることを意味する。

PhysMem – unused

未使用な物理メモリサイズ

VM – vsize

仮想メモリの総サイズ。
仮想メモリとは実際には存在しないが、実メモリにマップ領域を用意し、実際のメモリ上にページを配置したり(スワップイン)
抱えきれなくなったページをディスク上に吐き出したり(スワップアウト)することでプロセスからは膨大なメモリが使用可能なように見えるようにする仕組み。
当然実メモリよりも大幅に大きなサイズとなる。

VM – framework vsize

共有メモリにより諸費される仮想メモリサイズ。

VM – swapins

スワップインを起こしたページ数

VM – swapouts

スワップアウトを起こしたページ数

Network packets

ネットワークに対するin/outのパケットサイズを表す。

Disks

ディスク装置に対するread/writeのデータサイズを表す。

本日はこんなところで。にしてもosxはドキュメントが少ないですね。
https://apple.stackexchange.com/
上記はstackoverflowのapple版みたいなものなんですが、そちらが一番情報量が豊富なように思います。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です