top(1) は総合的なリソースと処理状況がリアルタイムで確認するツール。
uptime(1)、free(1)、ps(1) 等の出力を随時表示。
項目名 | 解説 |
---|---|
PID(A) | プロセスID Process Id |
PPID(b) | 親PID Parenet Process ID |
RUSER(c) | 実ユーザ名 Real User name 起動時のユーザ。SUIDがある場合、USERと異なる場合がある。 |
UID(d) | ユーザID User ID |
USER(E) | ユーザ名 User Name |
GROUP(f) | グループ名 Group Name |
TTY(g) | 制御端末 Controlling TTY |
PR(H) | 優先度 Priority |
NI(I) | ナイス値 Nice value |
P(j) | 直近使用CPU-ID Last used cpu(SMPのみ) 一般に同じプロセスは同一CPUで処理される方が効率がよい。 |
%CPU(K) | CPU使用率 CPU Usage |
TIME(l) | CPU使用時間 CPU Time |
TIME+(M) | CPU使用時間 CPU Time (1/100単位) |
%MEM(N) | メモリ使用率 Memory Usage |
VIRT(O) | 使用仮想メモリ容量 Virtual Image size (KB) |
SWAP(p) | スワップ量 Swapped size (KB) VIRT = SWAP + RES |
RES(Q) | 常駐メモリ容量 Resident size(KB) RES = CODE + DATA |
CODE(r) | コード容量 Code size(KB) |
DATA(s) | データ容量 Data + Stack size(KB) |
SHR(T) | 使用共有メモリ容量 Shared Memory size(KB) |
nFLT(u) | ページフォルト回数 Page Fault count メモリ上にないページ参照、Swap In が開始される。 |
nDRT(v) | ダーティページ数 Dirty Pages count メモリ上のページで更新されたがディスクに吐き出されていない状態のもの。 |
S(W) | プロセス状況 Process Status D: uninterruptible sleep, R: running, S: sleeping, T: toraced or stopped, Z: zombie |
COMMAND(X) | コマンドライン Command name/line |
WCHAN(y) | 休眠状態 Sleeping in Function |
Flags(z) | タスクフラグ Task Flags(sched.h) |
vmstat(1)はプロセス稼働状況、リソース使用量を随時表示し継続的な監視を行う。
例) startx を起動した直後
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 25252 47164 3140 36528 0 0 0 0 1003 24 0 0 100 0 0 0 0 25252 47164 3140 36528 0 0 0 0 999 22 0 0 100 0 0 0 0 25252 47164 3148 36528 0 0 0 6 1003 26 0 1 100 0 0 0 0 25252 46528 3220 36876 0 0 208 0 1033 67 0 2 88 11 0 0 1 25252 45112 3476 37440 0 0 388 116 1068 189 3 12 47 39 0 0 1 25252 41936 3688 40016 0 0 1390 0 1077 173 2 5 47 46 0 2 0 25248 38092 3860 43052 64 0 1646 206 1064 151 48 5 0 46 0 0 0 25248 37692 3860 43340 0 0 140 0 1003 28 74 1 24 2 0 0 0 25248 38344 3880 43408 48 0 98 194 1044 67 1 3 93 4 0 0 0 25248 38412 3880 43408 0 0 0 0 1002 25 0 0 100 0 0
Linux のプロセスは以下のライフサイクルとなる。
C プログラムと、実際のセグメント
$ cat -n mem.c 1 #include <stdio.h> 2 #include <unistd.h> 3 static int bss[2500]; 4 char str1[] = "....+....1....+....2....+....3....+....4....+....5\ 5 ....+....6....+....7....+....8....+....9....+....A"; 6 7 int main() 8 { 9 char str2[2], *str3; 10 str2[0] = 0x0; 11 12 puts(str1); 13 printf("PID=%d, bss addr=%lx, str1 addr=%lx, str2 addr=%lx\n", 14 getpid(), bss, str1, str2); 15 if( scanf("%s",str2) < 0 ) { 16 puts("scanf(3) error."); 17 } 18 } $ make mem cc mem.c -o mem $ size mem text data bss dec hex filename 1235 396 10032 11663 2d8f mem
プログラム実行時のメモリマップ
$ ./mem ....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8....+....9....+....A PID=2637, bss addr=8049800, str1 addr=8049760, str2 addr=bfa8643e (別の端末から) $ cat /proc/2637/maps address perm offset dev inode file pathname 006a9000-006c4000 r-xp 00000000 fd:00 622607 /lib/ld-2.5.so 006c4000-006c5000 r-xp 0001a000 fd:00 622607 /lib/ld-2.5.so 006c5000-006c6000 rwxp 0001b000 fd:00 622607 /lib/ld-2.5.so 006c8000-0081a000 r-xp 00000000 fd:00 622615 /lib/libc-2.5.so 0081a000-0081b000 --xp 00152000 fd:00 622615 /lib/libc-2.5.so 0081b000-0081d000 r-xp 00152000 fd:00 622615 /lib/libc-2.5.so 0081d000-0081e000 rwxp 00154000 fd:00 622615 /lib/libc-2.5.so 0081e000-00821000 rwxp 0081e000 00:00 0 00d50000-00d51000 r-xp 00d50000 00:00 0 [vdso] 08048000-08049000 r-xp 00000000 fd:00 995059 /home/student/mem 08049000-0804a000 rw-p 00000000 fd:00 995059 /home/student/mem 0804a000-0804c000 rw-p 0804a000 00:00 0 b7f0d000-b7f0f000 rw-p b7f0d000 00:00 0 b7f1b000-b7f1d000 rw-p b7f1b000 00:00 0 bfa73000-bfa88000 rw-p bffe9000 00:00 0 [stack]proc(5)より
sysstat パッケージに含まれるコマンド群
Command | Description |
---|---|
sar | 定期的に収集したシステム状況の表示 |
sadf | sar(8)で保存したデータのフォーマッタ |
iostat | HDD の統計情報 |
cifsiostat | CIFS(Windows共有)の統計情報 |
mpstat | プロセスに関する統計情報 |