AIX のバージョン 5L 以上では /proc というディレクトリがあります。 これは Linux 上で現在動いているプロセスのための擬似ディレクトリです。
この直下にある数字から成るディレクトリは PID (Process IDentifier) に対応するもので、カーネルにあるプロセス制御テーブルをマップしたものです。 従って、このサイズはディスク上のものではありません。
また、これらの擬似ファイルはカーネルの管理下にありますので、 削除できません。
このページでは AIX 5.2 Lで実行した結果を載せています。 ただし、svmon コマンドは 4.3 でも利用可能です。
> df -k Filesystem 1024-blocks Free %Used Iused %Iused Mounted on /dev/hd4 65536 51792 21% 2044 15% / /dev/hd2 5046272 2038808 60% 33395 7% /usr /dev/hd9var 655360 79964 88% 797 5% /var /dev/hd3 1310720 1164276 12% 974 1% /tmp /dev/hd1 18087936 3893156 79% 174209 16% /home /proc - - - - - /proc /dev/hd10opt 65536 14196 79% 1544 32% /opt /dev/lv00 5242880 589632 89% 5914 1% /media
プロセスが終了すると、/proc 配下からもなくなります。
PID を指定してこれらの情報を操作するツールがいくつかあります。
それらは、/bin/* にあり
/proc を管理するコマンドで詳細を述べます。
なお、/proc の構造体は /usr/include/procfs.h に定義されています。
![]() |
![]() |
まず、見たいプロセスの PID を求めます。
ora_dbw0_ast9203 のメモリマップを見ることにします。
> ps -ef | grep ast9203 | grep -v grep ast9203 286974 1 0 Oct 18 - 0:15 ora_lgwr_ast9203 ast9203 397442 2150468 0 08:49:12 pts/1 0:00 -csh ast9203 409608 1 0 Oct 18 - 0:00 ora_reco_ast9203 ast9203 528446 1 0 Oct 18 - 0:23 ora_dbw0_ast9203 ast9203 782450 1 0 Oct 18 - 0:52 ora_pmon_ast9203 ast9203 790714 1 0 Oct 18 - 0:27 ora_smon_ast9203 ast9203 864418 1 0 Oct 18 - 1:30 ora_ckpt_ast9203 ast9203 1720492 397442 0 08:49:59 pts/1 0:00 vi mal_tst.c ast9203 2150468 2433080 0 08:47:17 pts/1 0:00 -ksh ast9203 2179196 2564204 0 09:16:04 pts/3 0:00 mal_tst 1 ast9203 2289678 1351776 0 08:48:15 pts/6 0:00 -ksh ast9203 2551932 3039456 2 09:44:20 pts/6 0:00 ps -ef ast9203 2564204 3076176 0 08:49:01 pts/3 0:00 -csh ast9203 2633922 2138338 0 08:50:36 pts/8 0:00 -ksh ast9203 3039456 2289678 8 08:48:42 pts/6 0:00 -csh ast9203 3076176 958614 0 08:48:14 pts/3 0:00 -ksh ast9203 3088604 2633922 0 08:50:48 pts/8 0:00 -csh
以下のコマンドで、そのプロセスのメモリマップを得られます。
# svmon -P PID
では、PID 528446 の ora_dbw0_ast9203 のメモリマップを見てみましょう。
セグメントは、いくつかのページが集められたもので、 メモリー使用量の報告に使用される基本のオブジェクトです。 svmon によって報告される統計情報は、ページ単位に表示されます。 ページは、1 つが 4K の仮想メモリー・ブロックです。 これに対して、フレームは 4K の実メモリー・ブロックです。 特に注釈のない限り、統計情報はすべて 4096 バイトのメモリー・ページです。
メモリーの使用量は、inuse、free、pin、virtual、および paging space カウンターを使って報告されます。
# svmon -P 528446 ------------------------------------------------------------------------------- Pid Command Inuse Pin Pgsp Virtual 64-bit Mthrd LPage 528446 oracle 17415 3000 19047 31168 Y N N Vsid Esid Type Description LPage Inuse Pin Pgsp Virtual 5ce38 70000000 work default shmat/mmap - 4962 0 14534 16068 SGA 0 0 work kernel segment - 4539 2978 2009 6793 349ad 90000000 work loader segment - 3595 0 49 5741 4e53a 10 clnt text data BSS heap, - 3546 0 - - /dev/fslv00:4702 10dcb 70000001 work default shmat/mmap - 506 0 583 583 SGA 65199 90020014 work shared library text - 126 0 461 471 5ce78 11 work text data BSS heap - 75 0 1102 1134 7ced0 f00000002 work process private - 27 22 5 30 409f0 9ffffffe work other kernel segments - 17 0 10 23 41190 9fffffff clnt shared library text, - 9 0 - - /dev/hd2:2053 8ecd 9001000a work shared library text - 6 0 83 110 54eba ffffffff work application stack - 5 0 9 12 46394 - clnt /dev/fslv00:28710 - 1 0 - - 4ece 8001000a work private load - 1 0 89 90 30923 - clnt /dev/fslv00:266933 - 0 0 - - 3c900 - clnt /dev/fslv00:266929 - 0 0 - - 7df52 - clnt /dev/fslv00:266917 - 0 0 - - cdec 80020014 work private load - 0 0 103 103 64716 fffffff6 work application stack - 0 0 0 0 1ce08 fffffff0 work application stack - 0 0 0 0 3e7a2 - clnt /dev/fslv00:266919 - 0 0 - - 3a7a3 - clnt /dev/fslv00:217126 - 0 0 - - 1068b fffffffa work application stack - 0 0 0 0 4e59e - clnt /dev/fslv00:266925 - 0 0 - - 14e8a fffffffc work application stack - 0 0 0 0 8ef - clnt /dev/fslv00:266931 - 0 0 - - 32401 - clnt /dev/fslv00:266924 - 0 0 - - 88cd - clnt /dev/fslv00:266928 - 0 0 - - 7b690 - clnt /dev/fslv00:266927 - 0 0 - - 4cebc fffffffd work application stack - 0 0 0 0 136aa - clnt /dev/fslv00:223272 - 0 0 - - 18ea9 fffffff2 work application stack - 0 0 0 0 1cea8 fffffffe work application stack - 0 0 0 0 267a4 - clnt /dev/fslv00:266918 - 0 0 - - 1cec8 fffffff1 work application stack - 0 0 0 0 166e8 - clnt /dev/fslv00:266923 - 0 0 - - 24ec6 fffffff3 work application stack - 0 0 0 0 474e - clnt /dev/fslv00:266932 - 0 0 - - 44e5e fffffff4 work application stack - 0 0 0 0 2cec4 fffffff5 work application stack - 0 0 0 0 34ec2 fffffff7 work application stack - 0 0 0 0 2cee4 8fffffff work private load - 0 0 10 10 4c6fc fffffff8 work application stack - 0 0 0 0 3cec0 fffffff9 work application stack - 0 0 0 0 44ebe fffffffb work application stack - 0 0 0 0 5f7d3 - clnt /dev/fslv00:266930 - 0 0 - -
上記の出力項目のプロセス・レポートのカラム見出しについて説明します。
項目名 | 説 明 | |
---|---|---|
Pid | プロセス ID | |
Command | 実行中のコマンド | |
Inuse | セグメントの実メモリー内のページの総数 | |
Pin | セグメントのピン・ページの総数 | |
Pgsp | ページング・スペース上に予約あるいは使用されているページの総数 | |
Virtual | 仮想スペースに割り当てられたページの総数 | |
64-bit | 64 ビット・プロセス (Y) か 32 ビット・プロセス (N) | |
Mthrd | マルチスレッドである (Y) かそうでないか (N) | |
LPage | 大規模ページ・ステータスかどうかを示します。
「M」は必須を意味します。
「Y」はプロセスが大規模ページ・セグメントを使用するか、 すでに使用したことを意味し、 「N」はプロセスが大規模ページを 使用しないことを意味します。 |
プロセスのメモリは、テキスト・セグメント、データ・セグメント、
スタック・セグメントに分類されます。
ここでセグメントとは、
連続したメモリ領域のことで、ページ単位で管理されます。
上記例では、SGA の一部はページング・スペースに swapout されています。
14534 + 583 = 15117 (pages)
init.ora には LOCK_SGA=true が設定してありますので、 AIX 5.2 L では LOCK_SGA は有効にならないことがわかります。
また svmon の出力のセグメントの Type は以下のとおりです。
Type | 説明 |
---|---|
pers | 永続セグメントを表します |
work | 作業セグメントを表します |
clnt | クライアント・セグメントを表します |
map | マップされたセグメントを表します |
rmap | 実メモリ・マッピング・セグメントを表します |
上記プロセスの ps の結果は以下のようです。 svmon と ps の結果との関係はつぎのとおりです。 単位は svmon は page(=4KB)、ps は KB です。
> ps egv|grep 528446|grep -v grep PID TTY STAT TIME PGIN SIZE RSS LIM TSIZ TRS %CPU %MEM COMMAND 528446 - A 0:23 160 5956 14640 xx 45225 14184 0.0 0.0 ora_dbw > ps gu|grep 528446|grep -v grep USER PID %CPU %MEM SZ RSS TTY STAT STIME TIME COMMAND ast9203 528446 0.0 0.0 51180 14644 - A Oct 18 0:23 ora_dbw0_ast9203 [ ps コマンド出力の詳細 ] RSS (v フラグ) プロセスの実メモリー (常駐セット) のサイズ (1 キロバイト単位)。 この値はプロセスが所有するプライベート・セグメント・ページ数 および共有ライブラリデータ・セグメント・ページ数および コード・セグメント・ページ数を加えたものに4をかけた値 (1ページ4Kバイト)と同じです。 なお、コード・セグメント・ページはシステム内において他の プロセスと共有して使用されます。 SIZE (v フラグ) プロセスのデータ・セクションの仮想サイズ (1 キロバイト単位)。 TRS (v フラグ) テキストの常駐セット (実メモリー) のサイズ。 TSIZ (v フラグ) テキスト (共用プログラム) イメージのサイズ。 SZ (-l および l フラグ) プロセスのコア・イメージの 1 キロバイト単位のサイズ。 VSZ 仮想メモリーでのプロセスのサイズを、キロバイト単位の 10 進整数 で示します。このフィールドのデフォルト・ヘッダーは VSZ です。
![]() |
![]() |
# procmap 528446 528446 : ora_dbw0_ast9203 100000000 49031K read/exec oracle テキスト 1100003f8 2017K read/write oracle データ 9fffffff0000000 31K read/exec /usr/ccs/bin/usla64 9fffffff0007f3f 0K read/write /usr/ccs/bin/usla64 90000000028f000 3K read/exec /home11/ast9203/app/oracle/product/9.2.0/lib/libodm9.so 9001000a01a3738 0K read/write /home11/ast9203/app/oracle/product/9.2.0/lib/libodm9.so 90000000053fb20 240K read/exec /usr/lib/liblvm.a 9001000a01618f0 24K read/write /usr/lib/liblvm.a 90000000052dac0 65K read/exec /usr/lib/libcfg.a 9001000a015a488 24K read/write /usr/lib/libcfg.a 9000000004d99e0 55K read/exec /usr/lib/libperfstat.a 9001000a0157418 7K read/write /usr/lib/libperfstat.a 9000000004d7220 3K read/exec /usr/lib/libc.a 9001000a0156c00 0K read/write /usr/lib/libc.a 9000000004c2340 82K read/exec /usr/lib/libodm.a 9001000a014c500 35K read/write /usr/lib/libodm.a 9000000004c1000 0K read/exec /usr/lib/libdl.a 9001000a014b000 0K read/write /usr/lib/libdl.a 90000000174f100 4911K read/exec /home11/ast9203/app/oracle/product/9.2.0/lib/libjox9.a 8001000a0000f70 363K read/write /home11/ast9203/app/oracle/product/9.2.0/lib/libjox9.a 900000000494000 178K read/exec /usr/lib/libpthreads.a 9001000a00bf000 556K read/write /usr/lib/libpthreads.a 900000000248280 2K read/exec /usr/lib/libcrypt.a 9001000a00be760 0K read/write /usr/lib/libcrypt.a 900000000024240 2189K read/exec /usr/lib/libc.a 9001000a0000b20 756K read/write /usr/lib/libc.a Total 60584K
![]() |
![]() |
メモリリークを調べるプログラム mal_tst を使ったテスト結果を示します。 このプログラムは、40KB づつメモリを確保、初期化します。 以下の結果は、3回連続して実行した結果です。
ps コマンドの結果も SZ,RSS ともに 40 づつ増加しています。
また svmon の結果では work process private が 10 pages(1page=4KB)
づつ増加しています。
> ps gu|grep 2551886|grep -v grep USER PID %CPU %MEM SZ RSS TTY STAT STIME TIME COMMAND ast9203 2551886 0.0 0.0 212 448 pts/3 A 10:30:09 0:00 mal_tst 1 ast9203 2551886 0.0 0.0 252 488 pts/3 A 10:30:09 0:00 mal_tst 1 ast9203 2551886 0.0 0.0 292 528 pts/3 A 10:30:09 0:00 mal_tst 1 > ps egv|grep 2551886|grep -v grep PID TTY STAT TIME PGIN SIZE RSS LIM TSIZ TRS %CPU %MEM COMMAND 2551886 pts/3 A 0:00 0 180 448 xx 34 268 0.0 0.0 mal_tst 1 2551886 pts/3 A 0:00 0 220 488 xx 34 268 0.0 0.0 mal_tst 1 2551886 pts/3 A 0:00 0 260 528 xx 34 268 0.0 0.0 mal_tst 1 # svmon -P 2551886 ------------------------------------------------------------------------------- Pid Command Inuse Pin Pgsp Virtual 64-bit Mthrd LPage 2551886 mal_tst 9275 4964 2109 19276 N N N Vsid Esid Type Description LPage Inuse Pin Pgsp Virtual 289aa d work loader segment - 4624 1983 100 12438 0 0 work kernel segment - 4539 2978 2009 6793 77df2 1 clnt code,/dev/fslv00:286722 - 67 0 - - 394a1 2 work process private - 30 3 0 30 66716 f work shared library data - 15 0 0 15 # svmon -P 2551886 ------------------------------------------------------------------------------- Pid Command Inuse Pin Pgsp Virtual 64-bit Mthrd LPage 2551886 mal_tst 9285 4964 2109 19286 N N N Vsid Esid Type Description LPage Inuse Pin Pgsp Virtual 289aa d work loader segment - 4624 1983 100 12438 0 0 work kernel segment - 4539 2978 2009 6793 77df2 1 clnt code,/dev/fslv00:286722 - 67 0 - - 394a1 2 work process private - 40 3 0 40 66716 f work shared library data - 15 0 0 15 # svmon -P 2551886 ------------------------------------------------------------------------------- Pid Command Inuse Pin Pgsp Virtual 64-bit Mthrd LPage 2551886 mal_tst 9295 4964 2109 19296 N N N Vsid Esid Type Description LPage Inuse Pin Pgsp Virtual 289aa d work loader segment - 4624 1983 100 12438 0 0 work kernel segment - 4539 2978 2009 6793 77df2 1 clnt code,/dev/fslv00:286722 - 67 0 - - 394a1 2 work process private - 50 3 0 50 66716 f work shared library data - 15 0 0 15 # procmap 2551886 2551886 : mal_tst 1 10000000 52K read/exec mal_tst 200006d0 10K read/write mal_tst d007a0f8 2K read/exec /usr/lib/libcrypt.a f02b1508 0K read/write /usr/lib/libcrypt.a d01dfe00 2016K read/exec /usr/lib/libc.a f021ac30 597K read/write /usr/lib/libc.a Total 2679K
![]() |
![]() |
/proc ファイル・システムは、プロセスを制御するメカニズムを提供します。 また、プロセスとスレッドの現行状態についての情報もアクセスできますが、 これはバイナリー形式です。
コマンドが /proc から収集した情報は、 プロセスの現行状態のスナップショットであり、したがって停止したプロセス以外は、 刻々と変化します。
proctools コマンドは、いくつかの使用できる情報に基づいてレポートを提供します。 ツールの詳細は、以下のとおりです。
コマンド | 概 要 |
---|---|
proccred | プロセスのクリデンシャル (有効、実、保管のユーザー ID とグループ ID) を印刷します。 |
procfiles | プロセスがオープンしたすべてのファイル・ディスクリプターの情報をレポート します。 -n オプションを使用すると、対応するファイル名も表示します。 |
procflags | 指定されたプロセスの各スレッドについて、
/proc トレース・フラグ、保留シグナルと保持シグナル、およびその他の
/proc 状況情報を印刷します。オプション -r を使用すると、
マシン・レジスターの内容が印刷され、プロセスは該当のイベントで停止されます。
該当のイベントは、 |
procldd | プロセスによりロードされた動的ライブラリーを、 dlopen() を使用して明示的に接続された共用オブジェクトも含めて、リストします。 必要な情報はすべて、 /proc/ProcessID/map ファイルから収集されます。 |
procmap | プロセスのアドレス・スペース・マップを印刷します。 これは、プロセス内のそれぞれのマップされたセグメントの、 開始アドレスとサイズを表示します。 必要な情報はすべて、 /proc/ProcessID/map ファイルから収集されます。 |
procrun | PR_REQUESTED イベントで停止したプロセスを開始します |
procsig | プロセスで定義されたシグナル・アクションをリストします |
procstack | プロセス内のすべてのスレッドについて 16 進アドレスとシンボル名を印刷しま す |
procstop | R_REQUESTED イベントでプロセスを停止します |
proctree | 指定されたプロセス ID またはユーザーを含むプロセス・ツリーを印刷します。 子プロセスは、その親プロセスの下に字下げされます。 すべて数字の引数はプロセス ID と見なされ、 それ以外はユーザー・ログイン名と見なされます。 デフォルトのアクションは、プロセス 0 の子以外のすべてのプロセスをレポートします 。 |
procwait | 指定したすべてのプロセスが終了するのを待ちます |
procwdx | プロセスの現在の作業ディレクトリーを印刷します |
![]() |
![]() |