ユーザメモリを調査する
メモリ上に存在している実行中プロセスは、pmap -x pid <CR>によってプロセスセグメントの一覧を表示することが出来ます。次に、pmapコマンド-xオプションの出力を解説します。pmapコマンド-xオプションで表示することのできない、直ちに終了してしまうプロセスは、プロセスアカウント情報からサイズを確認します。ただし、プロセスアカウント情報では、mallocで拡張されたヒープ領域は加算されません。
【横の項目】
(A) | プロセスIDです。 |
(B) | そのプロセスのプログラム名です。 |
(C) | Address:セグメントの仮想(リニア)アドレスです。 |
(D) | Kbytes:キロバイト単位の実際のサイズを示します。 |
(E) | Resident:メモリに常駐しているサイズを示します。 |
(F) | Shared:共用コード、又は共用データのサイズです。 |
(G) | Private:プロセスのプライベート領域サイズです。 |
(H) | Permissions:保護属性フラグです(/usr/include/sys/procfs.hヘッダーファイルの"Protection and attributes"で定義されています)。 |
(I) | Mapped File:マップされているファイル名。pmapコマンド-xオプション実行時にDNLC上に名前があると表示されます。DNLC上に名前が無い場合は"dev: 32,603 ino: 138415"のように、ディスクのメジャー、マイナー番号とiノード番号が表示されます。 この"dev"表示が多い場合DNLC個数を増やすカーネルパラメタチューニングが必要です。 |
【縦の項目】
(J) | 実行プログラムのテキスト(インストラクション部分)セグメントです。同じプログラムが多数実行されたとしても共用されます。同一名のプログラムでディレクトリ位置の違う場所(リンクされていないところ)から実行されている場合は別プログラムとなります。 |
(K) | プログラムを実行するためのデータセグメントです。プロセス毎に別領域となります。 |
(L) | プログラムがmallocで割当てた領域です。brkシステムコールも、heap領域を割当てます。 |
(M) | 共有メモリID毎にサイズを計算します。仮想アドレスの先頭が"8"です。64ビットアーキテクチャのマシンではビット幅が増えて表示されます。 |
(N) | Anonymous(名前無し)の意味で、共用コードの使用するプロセス単位のデータセグメントです。 |
(O) | プログラムから呼び出された、共用コードのテキストセグメントです。他のプログラムもこの共用コードを使用することがあります。同一名の共用コードでディレクトリ位置の違う場所(リンクされていないところ)から実行されている場合は別共用コードとなります。 |
(P) | ライブラリコールによって使用されるセグメントで、プロセス単位に割り当てられます。writeの保護属性を持っています。 |
(Q) | スタックセグメントです。プロセスにただ一つ存在します。 |
# pmap -x 1028 <CR>
(A) 1028: |
(B) ora_ora900_XXX |
||||||
(C) Address |
(D) Kbytes |
(E) Resident |
(F) Shared |
(G) Private |
(H) Permissions |
(I) Mapped File |
|
00010000 | 8288 | 6672 | 6600 | 72 | read/exec | oracle | (J) |
00836000 | 80 | 72 | 32 | 40 | read/write/exec | oracle | (K) |
0084A000 | 480 | 320 | - | 320 | read/write/exec | [ heap ] | (L) |
80000000 | 485008 | 485008 | - | 485008 | read/write/exec/shared | [ ism shmid=0x5aa0 ] | (M) |
EF560000 | 8 | - | - | - | read/write/exec | [ anon ] | (N) |
EF570000 | 16 | 16 | 16 | - | read/exec | libc_psr.so.1 | (O) |
EF580000 | 592 | 592 | 592 | - | read/exec | libc.so.1 | (O) |
EF622000 | 32 | 32 | 8 | 24 | read/write/exec | libc.so.1 | (P) |
EF62A000 | 8 | 8 | - | 8 | read/write/exec | [ anon ] | (N) |
EF640000 | 16 | 16 | 16 | - | read/exec | libmp.so.2 | (O) |
EF652000 | 8 | 8 | 8 | - | read/write/exec | libmp.so.2 | (P) |
EF660000 | 24 | 24 | 24 | - | read/exec | libaio.so.1 | (O) |
EF674000 | 8 | 8 | 8 | - | read/write/exec | libaio.so.1 | (P) |
EF676000 | 8 | 8 | - | 8 | read/write/exec | [ anon ] | (N) |
EF680000 | 448 | 312 | 304 | 8 | read/exec | libnsl.so.1 | (O) |
EF6FE000 | 40 | 40 | 8 | 32 | read/write/exec | libnsl.so.1 | (P) |
EF708000 | 24 | - | - | - | read/write/exec | [ anon ] | (N) |
EF720000 | 24 | 24 | 24 | - | read/exec | libposix4.so.1 | (O) |
EF734000 | 8 | 8 | 8 | - | read/write/exec | libposix4.so.1 | (P) |
EF750000 | 88 | 88 | 88 | - | read/exec | libm.so.1 | (O) |
EF774000 | 8 | 8 | 8 | - | read/write/exec | libm.so.1 | (P) |
EF780000 | 32 | 32 | 32 | - | read/exec | libsocket.so.1 | (O) |
EF796000 | 8 | 8 | 8 | - | read/write/exec | libsocket.so.1 | (P) |
EF798000 | 8 | - | - | - | read/write/exec | [ anon ] | (N) |
EF7A0000 | 8 | 8 | 8 | - | read/exec | libdl.so.1 | (O) |
EF7B0000 | 8 | - | - | - | read/write/exec | [ anon ] | (N) |
EF7C0000 | 120 | 120 | 120 | - | read/exec | ld.so.1 | (O) |
EF7EC000 | 8 | 8 | 8 | - | read/write/exec | ld.so.1 | (P) |
EFFF8000 | 32 | 16 | - | 16 | read/write/exec | [ stack ] | (Q) |
-------- | ------ | ------ | ------ | ------ | |||
total Kb | 495440 | 493456 | 7920 | 485536 | |||
この差が大きいと元々メモリタッチが少なかったか、または、多くのページがページアウトされたかのどちらかです(ワーキングセットと考えることも出来ます)。psコマンドはKbytesのtotal Kbを"SZ"、Residentのtotal Kbを"RSS"として表示します。 |
【備考】値の単位は1024バイト(1キロバイト)です。
Copyright (C) 2004 by The Art of Computer Technologies, Corp. All rights reserved.