Linux では /proc というディレクトリがあります。 これは Linux 上で現在動いているプロセスのための擬似ディレクトリです。
この直下にある数字から成るディレクトリは PID (Process IDentifier) に対応するもので、カーネルにあるプロセス制御テーブルをマップしたものです。 従って、このサイズはディスク上のものではありません。
また、これらの擬似ファイルはカーネルの管理下にありますので、 削除できません。 プロセスが終了すると、/proc 配下からもなくなります。
まず、見たいプロセスの PID を求めます。
ora_dbw0_ora817 のメモリマップを見ることにします。
> ps -ef | grep ora817 | grep -v grep 20:ora817 773 1 0 Jun25 ? 00:00:00 ora_pmon_ora817 21:ora817 775 1 0 Jun25 ? 00:00:00 ora_dbw0_ora817 22:ora817 777 1 0 Jun25 ? 00:00:00 ora_lgwr_ora817 23:ora817 779 1 0 Jun25 ? 00:02:22 ora_ckpt_ora817 24:ora817 781 1 0 Jun25 ? 00:03:02 ora_smon_ora817 25:ora817 783 1 0 Jun25 ? 00:00:00 ora_reco_ora817 26:ora817 821 1 0 Jun25 ? 00:00:00 /home1/ora817/product/8.1.7/bin/ 65:root 19268 19267 0 13:52 pts/5 00:00:00 login -- ora817 67:root 19270 19269 0 13:52 pts/6 00:00:00 login -- ora817 68:ora817 19271 19270 0 13:52 pts/6 00:00:00 -tcsh 69:ora817 19306 19268 0 13:53 pts/5 00:00:00 -tcsh
プロセスのメモリマップは /proc/PID の下の maps にあります。
> cd /proc/775 >ls -l 合計 24832 dr-xr-xr-x 3 ora817 oinstall 0 10月 4 14:13 ./ dr-xr-xr-x 86 root root 0 6月 25 23:33 ../ -r--r--r-- 1 ora817 oinstall 0 10月 4 14:13 cmdline drwxr-xr-x 2 ora817 oinstall 4096 9月 9 17:17 cwd/ -r-------- 1 ora817 oinstall 0 10月 4 14:13 environ -rwsr-s--x 1 ora817 oinstall 25385665 6月 7 2002 exe* dr-x------ 2 ora817 oinstall 0 10月 4 14:13 fd/ -r--r--r-- 1 ora817 oinstall 0 10月 4 14:13 maps -rw------- 1 ora817 oinstall 0 10月 4 14:13 mem drwxr-xr-x 23 root root 4096 5月 14 2003 root/ -r--r--r-- 1 ora817 oinstall 0 10月 4 14:13 stat -r--r--r-- 1 ora817 oinstall 0 10月 4 14:13 statm -r--r--r-- 1 ora817 oinstall 0 10月 4 14:13 status
では、PID 775 の ora_dbw0_ora817 のメモリマップを見てみましょう。
> cat maps 08048000-09682000 r-xp 00000000 08:02 208453 /home1/ora817/product/8.1.7/bin/oracle テキスト 09682000-096b0000 rw-p 01639000 08:02 208453 /home1/ora817/product/8.1.7/bin/oracle データ 096b0000-096de000 rwxp 00000000 00:00 0 40000000-40014000 r-xp 00000000 08:01 80615 /lib/ld-2.2.3.so 40014000-40015000 rw-p 00013000 08:01 80615 /lib/ld-2.2.3.so 40015000-40016000 rwxp 00000000 00:00 0 40016000-40379000 r-xp 00000000 08:02 165988 /home1/ora817/product/8.1.7/lib/libjox8.so 40379000-40397000 rw-p 00362000 08:02 165988 /home1/ora817/product/8.1.7/lib/libjox8.so 40397000-40399000 rw-p 00000000 00:00 0 40399000-403a0000 r-xp 00000000 08:02 166017 /home1/ora817/product/8.1.7/lib/libdsbtsh8.so 403a0000-403a1000 rw-p 00006000 08:02 166017 /home1/ora817/product/8.1.7/lib/libdsbtsh8.so 403a1000-403a2000 rw-p 00000000 00:00 0 403a2000-403a4000 r-xp 00000000 08:01 80628 /lib/libdl-2.2.3.so 403a4000-403a5000 rw-p 00001000 08:01 80628 /lib/libdl-2.2.3.so 403a5000-403a6000 rw-p 00000000 00:00 0 403a6000-403c8000 r-xp 00000000 08:01 80630 /lib/libm-2.2.3.so 403c8000-403c9000 rw-p 00021000 08:01 80630 /lib/libm-2.2.3.so 403c9000-403d7000 r-xp 00000000 08:01 80660 /lib/libpthread-0.9.so 403d7000-403df000 rw-p 0000d000 08:01 80660 /lib/libpthread-0.9.so 403df000-404fd000 r-xp 00000000 08:01 80624 /lib/libc-2.2.3.so 404fd000-40503000 rw-p 0011d000 08:01 80624 /lib/libc-2.2.3.so 40503000-40507000 rw-p 00000000 00:00 0 40507000-40510000 r-xp 00000000 08:01 80649 /lib/libnss_files-2.2.3.so 40510000-40511000 rw-p 00008000 08:01 80649 /lib/libnss_files-2.2.3.so 50000000-5186e000 rw-s 00000000 00:03 32769 /SYSVf49c4910 (deleted) SGA bfffc000-c0000000 rwxp ffffd000 00:00 0 STACK
上記マップの説明は以下のとおりです。
/proc/PID の下には、以下のサブディレクトリがあります。
ファイル | 内容 |
---|---|
cmdline | コマンドライン引き数 |
environ | 環境変数の値 |
fd | 全てのファイルディスクリプタを含んだディレクトリ |
mem | このプロセスが保持しているメモリ |
stat | プロセスの状態 |
status | 人間が読める形式のプロセスの状態 |
cwd | プロセスの現在の作業ディレクトリへのリンク |
exe | このプロセスの実行形式へのリンク |
maps | メモリ・マップ |
root | このプロセスのルート・ディレクトリへのリンク |
statm | プロセスのメモリ状態についての情報 |
プロセスの状態についての情報を得るには /proc/PID/status というファイルを読むだけで可能です。
> cat status Name: oracle State: S (sleeping) Pid: 775 PPid: 1 TracerPid: 0 Uid: 501 501 501 501 Gid: 201 201 201 201 FDSize: 1024 Groups: 201 10 200 VmSize: 53348 kB VmLck: 0 kB VmRSS: 888 kB VmData: 220 kB VmStk: 16 kB VmExe: 22760 kB VmLib: 4956 kB SigPnd: 0000000000000000 SigBlk: 0000000080000000 SigIgn: 8000000006005203 SigCgt: 0000000389802cfc CapInh: 0000000000000000 CapPrm: 0000000000000000 CapEff: 0000000000000000 > ps -eo user,pid,nice,state,start_time,time,pcpu,dsiz,sz,rss,args | grep 775|grep -v grep USER PID NI S START TIME %CPU DSIZ SZ RSS COMMAND ora817 775 0 S Jun25 00:00:00 0.0 30588 13337 888 ora_dbw0_ora817
これは ps コマンドによって見ることができるのとほとんど同じ情報を示しています。 実際 ps はこの情報を proc ファイルシステムから取得しています。
statm ファイルにはプロセスの使用メモリについてのより詳しい情報があります。 その七つの値の意味は以下で説明します。
ファイル | 内容 |
---|---|
size | プログラムの合計サイズ:ページ数 |
resident | メモリ上にある部分のサイズ:ページ数 |
shared | 共有されているページ数 |
trs | コードのページ数 |
drs | データ/スタックのページ数 |
lrs | ライブラリのページ数 |
dt | 汚れた(dirty)ページ数 |
> cat statm 306 222 222 87 0 135 82