プロセスのメモリマップについて (solaris)


  1. メモリマップとは?
  2. oracle のメモリマップ
  3. database writer (dbw) のメモリマップ
  4. solaris 8 のメモリマップ
  5. solaris 9 のメモリマップ

メモリマップとは?

Solaris のバージョン 2.5 以上では /proc というディレクトリがあります。 これは UNIX 上で現在動いているプロセスのための擬似ディレクトリです。

この直下にある数字から成るディレクトリは PID (Process IDentifier) に対応するもので、カーネルにあるプロセス制御テーブルをマップしたものです。 従って、このサイズはディスク上のものではありません。

また、これらの擬似ファイルはカーネルの管理下にありますので、 削除できません。

このページでは solaris 7 (2.7) で実行した結果を載せていますが、 solaris 8 (2.8) では表示の一部が異なります。それについては solaris 8 のメモリマップで説明します。

> df -k
ファイルシステム      kbytes 使用済み 使用可能 capacity  マウント先
/proc                      0       0       0     0%    /proc
/dev/dsk/c0t0d0s0    1018191  340818  616282    36%    /
/dev/dsk/c0t0d0s6    1489367 1093092  336701    77%    /usr
fd                         0       0       0     0%    /dev/fd
/dev/dsk/c0t0d0s7    12908388 11363593 1415712    89%    /home00
/dev/dsk/c0t1d0s0    8706617 7216591 1402960    84%    /home01
/dev/dsk/c0t1d0s1    8706617 4790964 3828587    56%    /home02
/dev/dsk/c0t2d0s0    8706617 6367069 2252482    74%    /home03
/dev/dsk/c0t2d0s1    8706617 6669800 1949751    78%    /home04
/dev/dsk/c0t3d0s0    10084696 5262030 4721820    53%    /home05
/dev/dsk/c0t3d0s1    7328537 5768223 1487029    80%    /home06
/dev/dsk/c2t0d0s0    8706617 6396393 2223158    75%    /home07
/dev/dsk/c2t0d0s1    8706617 4149434 4470117    49%    /home08
/dev/dsk/c2t1d0s0    8706617 8034430  585121    94%    /home09
/dev/dsk/c2t1d0s1    8706617 5827737 2791814    68%    /home10
/dev/dsk/c2t2d0s0    8706617 7571723 1047828    88%    /home11
/dev/dsk/c2t2d0s1    8706617 7838737  780814    91%    /home12
/dev/dsk/c2t3d0s0    8258597 5043916 3132096    62%    /home13
/dev/dsk/c2t3d0s1    8258597 7956704  219308    98%    /home14
/dev/dsk/c2t3d0s2    8258597 4483346 3692666    55%    /home15
/dev/dsk/c2t3d0s3    8258597  393807 7782205     5%    /home16
swap                 4636640    1336 4635304     1%    /tmp

プロセスが終了すると、/proc 配下からもなくなります。

PID を指定してこれらの情報を操作するツールがいくつかあります。
それらは、/usr/proc/bin/* (solaris 2.5 以上)にあります。 solaris 8 (2.8) からは /bin の下にもあります。

なお、 /proc の構造体は /usr/include/procfs.h に定義されています。(solaris)




oracle のメモリマップ

まず、見たいプロセスの PID を求めます。

ora_s000_ora816 のメモリマップを見ることにします。

> ps -efl | grep ora816
 F S      UID   PID  PPID  C PRI NI     ADDR     SZ    WCHAN    STIME TTY      TIME CMD

 8 S   ora816   491     1  0  51 20        ?   1161        ?   4月 05 ?  0:00 /home12/ora816/app/oracle/product/8
 8 S   ora816 11509 11507  0  41 20        ?    342        ? 10:49:38 pts/16 0:00 -tcsh
 8 S   ora816  8673     1  0  40 20        ?  19446        ? 15:10:14 ?  0:00 ora_pmon_ora816
 8 S   ora816  8675     1  0  41 20        ?  19448        ? 15:10:14 ?  0:00 ora_dbw0_ora816
 8 S   ora816  8677     1  0  40 20        ?  19385        ? 15:10:14 ?  0:01 ora_lgwr_ora816
 8 S   ora816  8679     1  0  40 20        ?  19387        ? 15:10:14 ?  0:05 ora_ckpt_ora816
 8 S   ora816  8681     1  0  41 20        ?  19378        ? 15:10:15 ?  0:01 ora_smon_ora816
 8 S   ora816  8683     1  0  41 20        ?  19375        ? 15:10:15 ?  0:00 ora_reco_ora816
 8 S   ora816  8685     1  0  41 20        ?  19477        ? 15:10:15 ?  0:17 ora_snp0_ora816
 8 S   ora816  8687     1  0  40 20        ?  18925        ? 15:10:15 ?  0:00 ora_s000_ora816
 8 S   ora816  8689     1  0  40 20        ?  19425        ? 15:10:15 ?  0:00 ora_d000_ora816
 8 S   ora816  8691     1  0  40 20        ?  19385        ? 15:10:15 ?  0:00 ora_arc0_ora816

ps の SZ は仮想メモリー内のプロセスの合計サイズ (ページ単位 1page=8K) です。
従ってプロセス 8687 の仮想サイズは 18925 * 8 = 151400 (KB) です。

以下のコマンドで、そのプロセスのメモリマップを得られます。

> pmap -x PID 

では、PID 8687 の ora_s000_ora816 のメモリマップを見てみましょう。

> pmap -x 8687
8687:   ora_s000_ora816
Address   Kbytes Resident Shared Private Permissions       Mapped File
00010000   24696   14896    8744    6152 read/exec         oracle                テキスト
0183C000     232     232     176      56 read/write/exec   oracle                データ
01876000     104      96       -      96 read/write/exec    [ heap ]
80000000  119384  119384       -  119384 read/write/exec/shared  [shmid=0x5]      SGA
FEB00000     664     648     640       8 read/exec         libc.so.1
FEBB4000      32      32       -      32 read/write/exec   libc.so.1
FEBBC000       8       8       -       8 read/write/exec    [ anon ]
FEC00000    4872    3048    1024    2024 read/exec         libjox8.so
FF0D0000     176     176       -     176 read/write/exec   libjox8.so
FF0FC000      16       -       -       - read/write/exec    [ anon ]
FF140000      16      16       8       8 read/exec         libc_psr.so.1
FF150000      16      16       8       8 read/exec         libmp.so.2
FF162000       8       8       -       8 read/write/exec   libmp.so.2
FF170000      88      88      80       8 read/exec         libm.so.1
FF194000       8       8       -       8 read/write/exec   libm.so.1
FF1A0000       8       8       -       8 read/exec         libkstat.so.1
FF1B0000       8       8       -       8 read/write/exec   libkstat.so.1
FF1C0000       8       8       -       8 read/write/exec    [ anon ]
FF1D0000      32      32      24       8 read/exec         librt.so.1
FF1E6000       8       8       -       8 read/write/exec   librt.so.1
FF1F0000      32      32      24       8 read/exec         libaio.so.1
FF206000       8       8       -       8 read/write/exec   libaio.so.1
FF210000       8       8       -       8 read/exec         libsched.so.1
FF220000       8       8       -       8 read/write/exec   libsched.so.1
FF230000       8       8       8       - read/write/exec/shared  [ anon ]
FF240000      24      24      16       8 read/exec         libgen.so.1
FF254000      16      16       -      16 read/write/exec   libgen.so.1
FF260000      32      32      24       8 read/exec         libsocket.so.1
FF276000      16      16       -      16 read/write/exec   libsocket.so.1
FF280000     520     472     408      64 read/exec         libnsl.so.1
FF310000      40      40       -      40 read/write/exec   libnsl.so.1
FF31A000      32      24       -      24 read/write/exec    [ anon ]
FF330000      32      16       -      16 read/exec         libdsbtsh8.so
FF346000       8       8       -       8 read/write/exec   libdsbtsh8.so
FF348000       8       -       -       - read/write/exec    [ anon ]
FF350000       8       8       -       8 read/write/exec    [ anon ]
FF360000       8       8       -       8 read/exec         libwtc8.so
FF370000       8       8       -       8 read/write/exec   libwtc8.so
FF380000       8       8       -       8 read/exec         libskgxp8.so
FF390000       8       8       -       8 read/write/exec   libskgxp8.so
FF3A0000       8       8       -       8 read/exec         libdl.so.1
FF3B0000     136     136     128       8 read/exec         ld.so.1
FF3E0000      16      16       -      16 read/write/exec   ld.so.1
FFBEA000      24      24       -      24 read/write/exec    [ stack ]     スタック
--------  ------  ------  ------  ------
total Kb  151400  139656   11312  128344

上記の出力項目の説明は以下のとおりです。単位は KB です。

項目名説          明 ps 表示
Address 仮想メモリ上のアドレス (*)
Kbytes 仮想メモリ上のサイズ SZ
Resident 常駐部分のサイズ RSS
Shared 共有部分のサイズ
Private 個別部分のサイズ
Permissions メモリ属性
read/exec テキストセグメント(命令部分)
read/write/exec データセグメントまたはスタックセグメント(データ領域)
read/write/exec/shared 共用メモリ
Mapped File マップしているファイル名

(*) 仮想メモリ上のアドレスとは、実行形式を全メモリに展開した場合のアドレスです。 UNIX のメモリ管理は、仮想記憶という概念を利用していますので、 仮想という表現しますが、これらは実際には存在しません。

プロセスのメモリは、テキスト・セグメント、データ・セグメント、 スタック・セグメントに分類されます。
ここでセグメントとは、 連続したメモリ領域のことで、ページ単位で管理されます。

  1. 上記アドレス 0x00010000 にあるセグメントはテキスト・セグメントで、 実行モジュール oracle の命令部が read only でマップされています。

  2. 上記アドレス 0x0183C000 にあるセグメントはデータ・セグメントで、 実行モジュール oracle のデータ部がマップされています。 データ・セグメントは部分的に共有されますが、データを変更した場合は、 copy-on-write によって Private 領域となります。

  3. 上記アドレス 0x01876000 にあるセグメントは heap 領域で、 これは完全に Private 領域です。

  4. 上記アドレス 0x80000000 にあるデータセグメントは共用メモリで oracle の SGA(System Global Area) です。
    これは属性が Private ですが、oracle から 起動される ora_XXXX,oracleXXX などが共有するメモリで、 プロセス間の通信エリアとしても使われます。
    oracle 社が動作保証している SGA の最終アドレスは 0xfe000000 です。

    本来 SGA は Private でなく Shared であるべきです。 solaris 8 からは Shared となっています。

従って、ora_s000_ora816 が個別に使っていて現在メモリ上に常駐しているのは、 128344-119384=8960(KB) です。

また、Mapped File の [heap] や [anon](anonymous) は、 malloc() で個別に確保される領域です。
PGA(Program Global Area) とよばれる領域は、ここに確保されます。

これらのデータは、時々刻々と変化します。

ps のオプション -y を指定しないで得られるプロセスのメモリサイズの単位はページです。
solaris の場合、1ページ 8KB ですので、 8倍すると pmap で得られた total の値と等しくなります。

また top コマンドや ps コマンドの RSS (Resident memory size) には、 SGA やテキストセグメントの共有部分のサイズが含まれていますので、 oracle の全プロセスの使用メモリサイズはこれらの総計ではないことを 銘記しておいてください。




database writer (dbw) のメモリマップ

oracle database writer (dbw) のメモリマップは特殊です。 それは dbw がマルチスレッドプロセスだからです。
スレッドの数を表示する ps コマンドのオプションは -L です。

> ps -efL|grep ora_dbw0_ora817
     UID   PID  PPID   LWP  NLWP  C    STIME TTY     LTIME CMD
  ora817 28084     1     1    23  0 15:27:54 ?        0:00 ora_dbw0_ora817
  ora817 28084     1     2    23  0 15:28:00 ?        0:00 ora_dbw0_ora817
  ora817 28084     1     3    23  0 15:28:00 ?        0:00 ora_dbw0_ora817
  ora817 28084     1     4    23  0 15:28:00 ?        0:00 ora_dbw0_ora817
  ora817 28084     1     5    23  0 15:28:00 ?        0:00 ora_dbw0_ora817
  ora817 28084     1     6    23  0 15:28:00 ?        0:00 ora_dbw0_ora817
  ora817 28084     1     7    23  0 15:28:00 ?        0:00 ora_dbw0_ora817
  ora817 28084     1     8    23  0 15:28:00 ?        0:00 ora_dbw0_ora817
  ora817 28084     1     9    23  0 15:28:00 ?        0:00 ora_dbw0_ora817
  ora817 28084     1    10    23  0 15:28:00 ?        0:00 ora_dbw0_ora817
  ora817 28084     1    11    23  0 15:28:00 ?        0:00 ora_dbw0_ora817
  ora817 28084     1    12    23  0 17:57:12 ?        0:00 ora_dbw0_ora817
  ora817 28084     1    13    23  0 17:57:12 ?        0:00 ora_dbw0_ora817
  ora817 28084     1    14    23  0 17:57:12 ?        0:00 ora_dbw0_ora817
  ora817 28084     1    15    23  0 17:57:12 ?        0:00 ora_dbw0_ora817
  ora817 28084     1    16    23  0 17:57:12 ?        0:00 ora_dbw0_ora817
  ora817 28084     1    17    23  0 17:57:12 ?        0:00 ora_dbw0_ora817
  ora817 28084     1    18    23  0 17:57:12 ?        0:00 ora_dbw0_ora817
  ora817 28084     1    19    23  0 17:57:12 ?        0:00 ora_dbw0_ora817
  ora817 28084     1    20    23  0 17:57:12 ?        0:00 ora_dbw0_ora817
  ora817 28084     1    21    23  0 17:57:12 ?        0:00 ora_dbw0_ora817
  ora817 28084     1    22    23  0 17:57:12 ?        0:00 ora_dbw0_ora817
  ora817 28084     1    23    23  0 18:29:34 ?        0:00 ora_dbw0_ora817

上記より dbw には 23 のスレッドがあります。 PID が同じ 28084 であることから、同じプロセスであることが解ります。 ではこのプロセスの pmap を見てみましょう。

> pmap -x 28084
28084:  ora_dbw0_ora817
Address   Kbytes Resident Shared Private Permissions       Mapped File
00010000   26592    7784    5216    2568 read/exec         oracle
01A16000     264     192     136      56 read/write/exec   oracle
01A58000    1760      48       -      48 read/write/exec    [ heap ]
80000000   70848   70848       -   70848 read/write/exec/shared  [shmid=0x2ee5]
FE782000       8       -       -       - read/write/exec    [ anon ]
FE794000       8       -       -       - read/write/exec    [ anon ]
FE7A6000       8       -       -       - read/write/exec    [ anon ]
FE7B8000       8       -       -       - read/write/exec    [ anon ]
FE7CA000       8       -       -       - read/write/exec    [ anon ]
FE7DC000       8       -       -       - read/write/exec    [ anon ]
FE7EE000       8       -       -       - read/write/exec    [ anon ]
FE800000       8       -       -       - read/write/exec    [ anon ]
FE812000       8       -       -       - read/write/exec    [ anon ]
FE824000       8       -       -       - read/write/exec    [ anon ]
FE836000       8       -       -       - read/write/exec    [ anon ]
FE844000       8       -       -       - read/write/exec    [ anon ]
FE848000       8       -       -       - read/write/exec    [ anon ]
FE856000       8       -       -       - read/write/exec    [ anon ]
FE85A000       8       -       -       - read/write/exec    [ anon ]
FE868000       8       -       -       - read/write/exec    [ anon ]
FE86C000       8       -       -       - read/write/exec    [ anon ]
FE87A000       8       -       -       - read/write/exec    [ anon ]
FE87E000       8       -       -       - read/write/exec    [ anon ]
FE88C000       8       -       -       - read/write/exec    [ anon ]
FE890000       8       -       -       - read/write/exec    [ anon ]
FE89E000       8       -       -       - read/write/exec    [ anon ]
FE902000       8       -       -       - read/write/exec    [ anon ]
FE910000       8       -       -       - read/write/exec    [ anon ]
FE914000       8       -       -       - read/write/exec    [ anon ]
FE922000       8       -       -       - read/write/exec    [ anon ]
FE926000       8       -       -       - read/write/exec    [ anon ]
FE934000       8       -       -       - read/write/exec    [ anon ]
FE938000       8       -       -       - read/write/exec    [ anon ]
FE946000       8       -       -       - read/write/exec    [ anon ]
FE94A000       8       -       -       - read/write/exec    [ anon ]
FE958000       8       -       -       - read/write/exec    [ anon ]
FE95C000       8       -       -       - read/write/exec    [ anon ]
FE96A000       8       -       -       - read/write/exec    [ anon ]
FE96E000       8       -       -       - read/write/exec    [ anon ]
FE97C000       8       -       -       - read/write/exec    [ anon ]
FE980000       8       -       -       - read/write/exec    [ anon ]
FE98E000       8       -       -       - read/write/exec    [ anon ]
FE992000       8       -       -       - read/write/exec    [ anon ]
FE9A0000       8       -       -       - read/write/exec    [ anon ]
FE9A4000       8       -       -       - read/write/exec    [ anon ]
FE9B2000       8       -       -       - read/write/exec    [ anon ]
FE9B6000       8       -       -       - read/write/exec    [ anon ]
FE9C4000       8       -       -       - read/write/exec    [ anon ]
FE9C8000       8       -       -       - read/write/exec    [ anon ]
FE9D6000       8       -       -       - read/write/exec    [ anon ]
FE9DA000       8       -       -       - read/write/exec    [ anon ]
FE9E8000       8       -       -       - read/write/exec    [ anon ]
FE9EC000       8       -       -       - read/write/exec    [ anon ]
FE9FA000       8       -       -       - read/write/exec    [ anon ]
FE9FE000       8       -       -       - read/write/exec    [ anon ]
FEA0C000       8       -       -       - read/write/exec    [ anon ]
FEA10000       8       -       -       - read/write/exec    [ anon ]
FEA1E000       8       8       -       8 read/write/exec    [ anon ]
FEA70000       8       -       -       - read/write/exec    [ anon ]
FEA80000      16      16      16       - read/exec         libmp.so.2
FEA92000       8       8       8       - read/write/exec   libmp.so.2
FEAA0000     120      32      32       - read/exec         libelf.so.1
FEACC000       8       8       8       - read/write/exec   libelf.so.1
FEAE0000      16      16      16       - read/exec         libkvm.so.1
FEAF2000       8       8       8       - read/write/exec   libkvm.so.1
FEB00000     664     648     640       8 read/exec         libc.so.1
FEBB4000      40      40       8      32 read/write/exec   libc.so.1
FEBD0000      88      88      88       - read/exec         libm.so.1
FEBF4000       8       8       8       - read/write/exec   libm.so.1
FEC00000    4056     720     720       - read/exec         libjox8.so
FF004000     160       -       -       - read/write/exec   libjox8.so
FF02C000       8       -       -       - read/write/exec    [ anon ]
FF040000       8       8       8       - read/exec         libkstat.so.1
FF050000       8       8       8       - read/write/exec   libkstat.so.1
FF060000      32      32      32       - read/exec         librt.so.1
FF076000       8       8       8       - read/write/exec   librt.so.1
FF080000     520     392     376      16 read/exec         libnsl.so.1
FF110000      40      40       8      32 read/write/exec   libnsl.so.1
FF11A000      32       -       -       - read/write/exec    [ anon ]
FF130000      16      16      16       - read/exec         libc_psr.so.1
FF140000      32      32      32       - read/exec         libaio.so.1
FF156000       8       8       8       - read/write/exec   libaio.so.1
FF160000       8       8       8       - read/exec         libsched.so.1
FF170000       8       8       8       - read/write/exec   libsched.so.1
FF180000     912     160     160       - read/exec         liblsm.so
FF272000      48       -       -       - read/write/exec   liblsm.so
FF27E000     504       -       -       - read/write/exec    [ anon ]
FF310000       8       -       -       - read/write/exec    [ anon ]
FF320000       8       8       8       - read/write/exec/shared  [ anon ]
FF330000      24      24      24       - read/exec         libgen.so.1
FF344000      16      16       8       8 read/write/exec   libgen.so.1
FF350000      32      32      32       - read/exec         libsocket.so.1
FF366000      16      16       8       8 read/write/exec   libsocket.so.1
FF370000       8       8       8       - read/exec         libskgxp8.so
FF380000       8       8       8       - read/write/exec   libskgxp8.so
FF390000       8       8       8       - read/exec         libdl.so.1
FF3A0000       8       -       -       - read/write/exec    [ anon ]
FF3B0000     144     144     144       - read/exec         ld.so.1
FF3E2000      16      16       8       8 read/write/exec   ld.so.1
FFBEA000      24      16       -      16 read/write/exec    [ stack ]
--------  ------  ------  ------  ------
total Kb  107608   81488    7832   73656

dbw は定期的に SGA の db_block_buffers の更新情報をデータベースに書き出すプロセスです。
書き込みのシステムコールとして aiowrite() を使います。 これは kaio (kernel asynchronous I/O) と呼ばれています。

kaio は raw デバイスの場合はカーネル内部で非同期入出力をしますが、 それ以外の場合はユーザスレッドを利用します。 ufs(Unix File System) の場合も、ユーザスレッドを利用します。 上記の例も ufs なのでユーザスレッドとなっています。

上記の [anon] は、各スレッドが使うスタックです。 全部で 54 ありますが、上記のマップでは常駐していませんので、 データベースへの更新がないようです。

solaris での aio の最大スレッド数は 258 です。 ですから長い間 oracle を使い続けると、 ほとんどの dbw のスレッド数は最大の 258 になり、 各スレッドに3ページくらいのスタックが必要ですので、 メモリ増分に気をつける必要があります。




solaris 8 のメモリマップ

solaris 8 では SGA は Shared に含まれるように変更されました。 これが最も理にかなった表示であると思われます。

oracle の全プロセスが占めるメモリの概算は以下のとおりです。

oracle プロセスメモリ = Private * (oracle プロセス数) + Shared (+ PGA)

> pmap -x 21701
21701:  ora_cjq0_ora92032
 Address   Kbytes Resident Shared Private Permissions       Mapped File
00010000   49136   25304   25304       - read/exec         oracle        text segment
0301A000     488     360     312      48 read/write/exec   oracle        data segment
03094000     288     160     120      40 read/write/exec     [ heap ]
20000000  593920  593920  593920       - read/write/exec/shared  [ ism shmid=0x141e5 ]    SGA 
FEB00000       8       8       8       - read/write          [ anon ]
FEB10000       8       8       8       - read/write          [ anon ]
FEB50000       8       8       -       8 read/write          [ anon ]
FEB58000      48      48       8      40 read/write          [ anon ]
FEB68000      32      32       -      32 read/write          [ anon ]
FEBB0000      16      16      16       - read/exec         libmp.so.2
FEBC4000       8       8       8       - read/write/exec   libmp.so.2
FEBD0000      88      72      72       - read/exec         libm.so.1
FEBF4000       8       8       8       - read/write/exec   libm.so.1
FEC00000    4416    1216    1216       - read/exec         libjox9.so
FF05E000     192     168     168       - read/write/exec   libjox9.so
FF0A0000       8       8       8       - read/exec         libkstat.so.1
FF0B2000       8       8       8       - read/write/exec   libkstat.so.1
FF0C0000      24      24      24       - read/exec         librt.so.1
FF0D6000       8       8       8       - read/write/exec   librt.so.1
FF0E0000      32      24      24       - read/exec         libaio.so.1
FF0F8000       8       8       8       - read/write/exec   libaio.so.1
FF100000     688     632     632       - read/exec         libc.so.1
FF1BC000      32      32      16      16 read/write/exec   libc.so.1
FF1D0000       8       8       8       - read/write/exec     [ anon ]
FF1E0000       8       8       8       - read/exec         libsched.so.1
FF1F2000       8       8       8       - read/write/exec   libsched.so.1
FF200000     568     392     392       - read/exec         libnsl.so.1
FF29E000      40      40      40       - read/write/exec   libnsl.so.1
FF2A8000      24      16      16       - read/write/exec   libnsl.so.1
FF2C0000      16      16      16       - read/exec         libc_psr.so.1
FF2D0000       8       8       8       - read/write/exec/shared   [ anon ]
FF2E0000       8       8       -       8 read/write/exec     [ anon ]
FF2F0000      24      24      24       - read/exec         libgen.so.1
FF306000       8       8       8       - read/write/exec   libgen.so.1
FF310000      40      40      40       - read/exec         libsocket.so.1
FF32A000       8       8       8       - read/write/exec   libsocket.so.1
FF330000       8       8       8       - read/exec         libskgxn9.so
FF340000       8       8       8       - read/write/exec   libskgxn9.so
FF350000       8       8       8       - read/exec         libskgxp9.so
FF360000       8       8       8       - read/write/exec   libskgxp9.so
FF370000       8       8       8       - read/exec         libodmd9.so
FF380000       8       8       8       - read/write/exec   libodmd9.so
FF390000       8       8       8       - read/exec         libdl.so.1
FF3A0000       8       8       -       8 read/write/exec     [ anon ]
FF3B0000     160     160     160       - read/exec         ld.so.1
FF3E8000       8       8       -       8 read/write/exec   ld.so.1
FFBE8000      32      32      16      16 read/write/exec     [ stack ]     stack segment
--------  ------  ------  ------  ------
total Kb  650504  622928  622704     224




solaris 9 のメモリマップ

solaris 9 では、さらに以下のような表記になりました。 oracle 9 からは SGA_MAX_SIZE を指定できますが、 このサイズ分はじめから実メモリを確保するのではなく、 不足した場合に動的に OS により実メモリにマップされます。

下記の例は、SGA_MAX_SIZE が 11.6G ですが、 現在実メモリにマップされているのは 3633152KB(3.46G) です (RSS(Resident physical memory)) 。

また3カラム目の Anon は、そのプロセスが個別に使っている、 データセグメント、スタックセグメントを表しています。

> pmap -x 11233
11233:  ora_smon_dbtp0601
         Address     Kbytes        RSS       Anon     Locked Mode   Mapped File
0000000100000000      50472      28912          -          - r-x--  oracle       text segment
0000000103248000        712        536        112          - rwx--  oracle       data segment
00000001032FA000        464        336        336          - rwx--    [ heap ]
0000000380000000       4096       4096          -          - rwxs-    [ dism shmid=0x6a6 ]
0000040000000000    2457600          -          -          - rwxs-    [ dism shmid=0x7020 ]
00000400C0000000    3670016          -          -          - rwxs-    [ dism shmid=0x35ed ]
00000401C0000000    3665920    3633152          -          - rwxs-    [ dism shmid=0x196 ]    SGA 
FFFFFFFF7CBF0000        200        200        200          - rw--R    [ anon ]
FFFFFFFF7CC2E000          8          8          8          - rw--R    [ anon ]
FFFFFFFF7CD70000        512        512        512          - rw--R    [ anon ]
FFFFFFFF7CE00000          8          8          8          - rw--R    [ anon ]
FFFFFFFF7CE10000          8          8          8          - rw--R    [ anon ]
FFFFFFFF7CE50000        192        192        192          - rw--R    [ anon ]
FFFFFFFF7CF00000          8          8          8          - rwx--    [ anon ]
FFFFFFFF7D000000          8          8          -          - r-x--  libmd5.so.1
FFFFFFFF7D102000          8          8          8          - rwx--  libmd5.so.1
FFFFFFFF7D200000         16         16          -          - r-x--  libmp.so.2
FFFFFFFF7D304000          8          8          8          - rwx--  libmp.so.2
FFFFFFFF7D400000        216        160          -          - r-x--  libm.so.1
FFFFFFFF7D534000         16         16         16          - rwx--  libm.so.1
FFFFFFFF7D600000          8          8          8          - rwx--    [ anon ]
FFFFFFFF7D700000          8          8          -          - r-x--  libkstat.so.1
FFFFFFFF7D802000          8          8          8          - rwx--  libkstat.so.1
FFFFFFFF7D900000         32         32          -          - r-x--  librt.so.1
FFFFFFFF7DA08000          8          8          8          - rwx--  librt.so.1
FFFFFFFF7DB00000         32         32          -          - r-x--  libaio.so.1
FFFFFFFF7DC08000          8          8          8          - rwx--  libaio.so.1
FFFFFFFF7DC0A000          8          -          -          - rwx--  libaio.so.1
FFFFFFFF7DD00000        720        720          -          - r-x--  libc.so.1
FFFFFFFF7DEB4000         56         56         56          - rwx--  libc.so.1
FFFFFFFF7DEC2000          8          8          8          - rwx--  libc.so.1
FFFFFFFF7DF00000          8          8          8          - rwx--    [ anon ]
FFFFFFFF7E000000         32         24          -          - r-x--  libgen.so.1
FFFFFFFF7E108000          8          8          8          - rwx--  libgen.so.1
FFFFFFFF7E200000         48         48          -          - r-x--  libsocket.so.1
FFFFFFFF7E30C000         16         16         16          - rwx--  libsocket.so.1
FFFFFFFF7E400000       5328       2728          -          - r-x--  libjox9.so
FFFFFFFF7EA32000        384        288        288          - rwx--  libjox9.so
FFFFFFFF7EA92000          8          -          -          - rwx--  libjox9.so
FFFFFFFF7EB00000          8          8          -          - r-x--  libc_psr.so.1
FFFFFFFF7EC00000        664        288          -          - r-x--  libnsl.so.1
FFFFFFFF7EDA6000         56         56         56          - rwx--  libnsl.so.1
FFFFFFFF7EDB4000         40         32         32          - rwx--  libnsl.so.1
FFFFFFFF7EE00000          8          8          8          - rwx--    [ anon ]
FFFFFFFF7EF00000         32         24          -          - r-x--  libskgxn9.so
FFFFFFFF7F006000          8          8          8          - rwx--  libskgxn9.so
FFFFFFFF7F100000          8          8          -          - r-x--  libskgxp9.so
FFFFFFFF7F200000          8          8          8          - rwx--  libskgxp9.so
FFFFFFFF7F300000          8          8          -          - r-x--  libodmd9.so
FFFFFFFF7F400000          8          8          8          - rwx--  libodmd9.so
FFFFFFFF7F500000          8          8          -          - r-x--  libdl.so.1
FFFFFFFF7F600000        152        152          -          - r-x--  ld.so.1
FFFFFFFF7F724000         16         16         16          - rwx--  ld.so.1
FFFFFFFF7F728000          8          8          8          - rwx--  ld.so.1
FFFFFFFF7FFE4000        112        112        112          - rw---    [ stack ]      stack segment
---------------- ---------- ---------- ---------- ----------
        total Kb    9858360    3672944       2088          -

以下がこの時の ipcs の結果です。 ipcs のID とpmap の Mapped File の shmid とが一致します(表記が10進と16進)。 shmid=0x196 は ID=406 でこれにのみ KEY が割り当てられていることからも、 実メモリが割り当てられていることが解ります。

T         ID      KEY        MODE        OWNER    GROUP  CREATOR   CGROUP NATTCH      SEGSZ  CPID  LPID   ATIME    DTIME    CTIME
Shared Memory:
m          0   0xde021c3e --rw-------     root     root     root     root      1       3840   173 13307 23:06:58 23:06:58  7:52:04
m          1   0xde021c3d --rw-------     root     root     root     root      1        768   173 11072  7:52:04 22:21:55  7:52:04
m       1702   0          --rw-r-----   oracle      dba   oracle      dba     88    4194304 11188 18199 17:36:43 17:36:55 22:23:40
m        103   0xcace     --rw-rw-rw-     root    other     root    other      0          2  6773 10941 15:03:17 15:03:17 20:45:03
m      28704   0          --rw-r-----   oracle      dba   oracle      dba     88 2516582400 11188 18199 17:36:43 17:36:55 22:23:40
m      13805   0          --rw-r-----   oracle      dba   oracle      dba     88 3758096384 11188 18199 17:36:43 17:36:55 22:23:40
m        406   0x60b99a54 --rw-r-----   oracle      dba   oracle      dba     88 3753902080 11188 18199 17:36:43 17:36:55 22:23:40  



関連項目 (solaris)

proc(1),ps(1),ipcs(1)