ORA-4030のトレースファイルから領域ごとのメモリ使用量を調べる

手順

  • トレースから Process Map Dump セクションを抽出する
perl -nle '/End of process map dump/ and exit;/Dumping process map/ and $b=$.+1;defined($b) and $.>$b and print;'
foo.trc > process_map_dump.txt
  • 行番号、マッピング、サイズ(KB)という形式に整形する
perl -lane '($b,$e)=split(/-/,$F[0]);printf(qq/$.\t%s\t%d\n/,$F[5],(hex($e)-hex($b))/1024)' process_map_dump.txt > process_map_size.txt 

  • Linux だと ORA-4030のトレースファイルの process map dump は /proc/pid/maps のままぽいので、/proc/pid/maps を加工する例を記載する。
$ cat /proc/self/maps|perl -lane '($b,$e)=split(/-/,$F[0]);printf(qq/$.\t%s\t%d\n/,$F[5],(hex($e)-hex($b))/1024)'
1	/bin/cat	44
2	/bin/cat	4
3		4
4	/bin/cat	4
5	[heap]	132
6	/lib64/ld-2.12.so	128
7	/lib64/ld-2.12.so	4
8	/lib64/ld-2.12.so	4
9		4
10	/lib64/libc-2.12.so	1580
11	/lib64/libc-2.12.so	2044
12	/lib64/libc-2.12.so	16
13	/lib64/libc-2.12.so	4
14		20
15	/usr/lib/locale/locale-archive	96836
16		12
17		4
18	[stack]	136
19	[vdso]	4
20	[vsyscall]	4

行番号、名前、サイズ(KB)

おまけ

  • pmap も /proc/[pid]/maps とかを加工してるだけぽい
$ strace -e open pmap -x $$
open("/etc/ld.so.cache", O_RDONLY)      = 3
open("/lib64/libproc-3.2.8.so", O_RDONLY) = 3
open("/lib64/libc.so.6", O_RDONLY)      = 3
open("/sys/devices/system/cpu/online", O_RDONLY|O_CLOEXEC) = 3
open("/proc/self/maps", O_RDONLY)       = 0 ★
open("/proc/7993/stat", O_RDONLY)       = 3
open("/proc/7993/cmdline", O_RDONLY)    = 3
open("/proc/7993/smaps", O_RDONLY)      = 0
7993:   /bin/zsh
Address           Kbytes     RSS   Dirty Mode   Mapping
0000000000400000     636     564       0 r-x--  zsh
000000000069f000      24      24      24 rw---  zsh
00000000006a5000      76      36      36 rw---    [ anon ]
00000000008a4000      16      16       0 rw---  zsh
00000000025c6000    1600    1532    1532 rw---    [ anon ]
0000003ba6200000     128     112       0 r-x--  ld-2.12.so
0000003ba641f000       4       4       4 r----  ld-2.12.so
0000003ba6420000       4       4       4 rw---  ld-2.12.so
0000003ba6421000       4       4       4 rw---    [ anon ]
0000003ba6600000    1580     580       0 r-x--  libc-2.12.so
0000003ba678b000    2044       0       0 -----  libc-2.12.so
0000003ba698a000      16      16       4 r----  libc-2.12.so