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 | プロセスに関する統計情報 |