pmap というコマンドの使い方を覚えたので忘れないうちにメモ.

pmap は指定したプロセスのメモリマッピングに関する情報を proc ファイルシステムから取得し,表示してくれるツールです.例えば,bash プロセスのメモリマッピングがどんな風になっているか,次のように調べることができます.

$ ps | grep bash
27723 pts/0    00:00:00 bash
$ pmap 27723
27723:   bash
0000000000400000    896K r-x--  /bin/bash
00000000006e0000      4K r----  /bin/bash
00000000006e1000     36K rw---  /bin/bash
00000000006ea000     24K rw---    [ anon ]
0000000000dde000   4356K rw---    [ anon ]
00007ffc73ad5000     48K r-x--  /lib/x86_64-linux-gnu/libnss_files-2.15.so
00007ffc73ae1000   2044K -----  /lib/x86_64-linux-gnu/libnss_files-2.15.so
00007ffc73ce0000      4K r----  /lib/x86_64-linux-gnu/libnss_files-2.15.so
00007ffc73ce1000      4K rw---  /lib/x86_64-linux-gnu/libnss_files-2.15.so
00007ffc73ce2000  13884K r----  /usr/lib/locale/locale-archive
00007ffc74a71000   1748K r-x--  /lib/x86_64-linux-gnu/libc-2.15.so
00007ffc74c26000   2048K -----  /lib/x86_64-linux-gnu/libc-2.15.so
00007ffc74e26000     16K r----  /lib/x86_64-linux-gnu/libc-2.15.so
00007ffc74e2a000      8K rw---  /lib/x86_64-linux-gnu/libc-2.15.so
00007ffc74e2c000     20K rw---    [ anon ]
00007ffc74e31000      8K r-x--  /lib/x86_64-linux-gnu/libdl-2.15.so
00007ffc74e33000   2048K -----  /lib/x86_64-linux-gnu/libdl-2.15.so
00007ffc75033000      4K r----  /lib/x86_64-linux-gnu/libdl-2.15.so
00007ffc75034000      4K rw---  /lib/x86_64-linux-gnu/libdl-2.15.so
00007ffc75035000    136K r-x--  /lib/x86_64-linux-gnu/libtinfo.so.5.9
00007ffc75057000   2048K -----  /lib/x86_64-linux-gnu/libtinfo.so.5.9
00007ffc75257000     16K r----  /lib/x86_64-linux-gnu/libtinfo.so.5.9
00007ffc7525b000      4K rw---  /lib/x86_64-linux-gnu/libtinfo.so.5.9
00007ffc7525c000    136K r-x--  /lib/x86_64-linux-gnu/ld-2.15.so
00007ffc7545a000     12K rw---    [ anon ]
00007ffc75475000     28K r--s-  /usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache
00007ffc7547c000      8K rw---    [ anon ]
00007ffc7547e000      4K r----  /lib/x86_64-linux-gnu/ld-2.15.so
00007ffc7547f000      8K rw---  /lib/x86_64-linux-gnu/ld-2.15.so
00007fffa9298000    132K rw---    [ stack ]
00007fffa92c1000      8K r-x--    [ anon ]
ffffffffff600000      4K r-x--    [ anon ]
 total            29748K

左から,仮想アドレス,仮想マッピングサイズ,アクセス権,マッピング名を意味しています.マッピング名のうち,anon は名前付きオブジェクトやファイルに関連付いていないメモリ,もしくはマッピング名が分からないものに対して表示されます.stack はメインスタックです.

-x オプションを追加すると,RSS (Resident Set Size) や Dirty page に関する情報も得られます.

$ pmap -x 27723
27723:   bash
Address           Kbytes     RSS   Dirty Mode   Mapping
0000000000400000       0     652       0 r-x--  bash
00000000006e0000       0       4       4 r----  bash
00000000006e1000       0      36      36 rw---  bash
00000000006ea000       0      24      24 rw---    [ anon ]
0000000000dde000       0    4352    4352 rw---    [ anon ]
00007ffc73ad5000       0      16       0 r-x--  libnss_files-2.15.so
00007ffc73ae1000       0       0       0 -----  libnss_files-2.15.so
00007ffc73ce0000       0       4       4 r----  libnss_files-2.15.so
00007ffc73ce1000       0       4       4 rw---  libnss_files-2.15.so
00007ffc73ce2000       0      52       0 r----  locale-archive
00007ffc74a71000       0     664       0 r-x--  libc-2.15.so
00007ffc74c26000       0       0       0 -----  libc-2.15.so
00007ffc74e26000       0      16      16 r----  libc-2.15.so
00007ffc74e2a000       0       8       8 rw---  libc-2.15.so
00007ffc74e2c000       0      20      20 rw---    [ anon ]
00007ffc74e31000       0       8       0 r-x--  libdl-2.15.so
00007ffc74e33000       0       0       0 -----  libdl-2.15.so
00007ffc75033000       0       4       4 r----  libdl-2.15.so
00007ffc75034000       0       4       4 rw---  libdl-2.15.so
00007ffc75035000       0     116       0 r-x--  libtinfo.so.5.9
00007ffc75057000       0       0       0 -----  libtinfo.so.5.9
00007ffc75257000       0      16      16 r----  libtinfo.so.5.9
00007ffc7525b000       0       4       4 rw---  libtinfo.so.5.9
00007ffc7525c000       0     112       0 r-x--  ld-2.15.so
00007ffc7545a000       0      12      12 rw---    [ anon ]
00007ffc75475000       0      24       0 r--s-  gconv-modules.cache
00007ffc7547c000       0       8       8 rw---    [ anon ]
00007ffc7547e000       0       4       4 r----  ld-2.15.so
00007ffc7547f000       0       8       8 rw---  ld-2.15.so
00007fffa9298000       0      48      48 rw---    [ stack ]
00007fffa92c1000       0       4       0 r-x--    [ anon ]
ffffffffff600000       0       0       0 r-x--    [ anon ]
----------------  ------  ------  ------
total kB           29776    6224    4576

pmap は,ps や top といったコマンドと一緒に Procps (The /proc file system utilities) と呼ばれるユーティリティに含まれています.