Hi guys,
I need to investigate a memory leak on a solaris server, so what I have done is pmap'd each process on the system with a script which tar'd the directory every hour in cron. Now I need to write a script to process the pmap data.
So what I have is about 100 directories
[root@localhost ~]# ll pmaptest/pmapdata2009101
pmapdata20091012122344/ pmapdata20091013080000/ pmapdata20091013230000/ pmapdata20091014140000/ pmapdata20091015050000/ pmapdata20091015200001/
pmapdata20091012180000/ pmapdata20091013090000/ pmapdata20091014000000/ pmapdata20091014150000/ pmapdata20091015060000/ pmapdata20091015210000/
pmapdata20091012190000/ pmapdata20091013100000/ pmapdata20091014010000/ pmapdata20091014160000/ pmapdata20091015070000/ pmapdata20091015220000/
.......
inside each directory is the output from the pmap on that process
[root@localhost pmapdata]# ll
total 1172
-rw-r--r-- 1 root root 21 2009-10-12 17:00 pmap0.txt
-rw-r--r-- 1 root root 21394 2009-10-12 17:00 pmap11746.txt
-rw-r--r-- 1 root root 3148 2009-10-12 17:00 pmap1294.txt
-rw-r--r-- 1 root root 8578 2009-10-12 17:00 pmap13176.txt
-rw-r--r-- 1 root root 9316 2009-10-12 17:00 pmap14005.txt
-rw-r--r-- 1 root root 2862 2009-10-12 17:00 pmap14006.txt
-rw-r--r-- 1 root root 2134 2009-10-12 17:00 pmap141.txt
-rw-r--r-- 1 root root 13857 2009-10-12 17:00 pmap14467.txt
-rw-r--r-- 1 root root 13959 2009-10-12 17:00 pmap14468.txt
-rw-r--r-- 1 root root 20210 2009-10-12 17:00 pmap14469.txt
-rw-r--r-- 1 root root 13003 2009-10-12 17:00 pmap14470.txt
-rw-r--r-- 1 root root 7652 2009-10-12 17:00 pmap16406.txt
-rw-r--r-- 1 root root 6032 2009-10-12 17:00 pmap16436.txt
-rw-r--r-- 1 root root 6032 2009-10-12 17:00 pmap16438.txt
the format of the filename is pmap<pid>.txt
inside each file looks like this
[root@localhost pmapdata]# cat pmap985.txt
4423 1388 grep $pid
985: /usr/local/sbin/xinetd -f /usr/local/etc/xinetd.conf
Address Kbytes RSS Anon Locked Mode Mapped File
08045000 12 12 4 - rw--- [ stack ]
08050000 212 140 - - r-x-- xinetd
08094000 4 4 - - rwx-- xinetd
08095000 44 40 20 - rwx-- [ heap ]
FED20000 64 4 - - rwx-- [ anon ]
FED40000 64 8 - - rwx-- [ anon ]
FED60000 1080 1080 - - r-x-- libc.so.1
FEE7E000 32 32 20 - rw--- libc.so.1
FEE86000 8 4 - - rw--- libc.so.1
FEE90000 516 516 - - r-x-- libnsl.so.1
FEF21000 20 20 4 - rw--- libnsl.so.1
FEF26000 32 8 - - rw--- libnsl.so.1
FEF30000 44 44 - - r-x-- libsocket.so.1
FEF40000 24 12 4 - rwx-- [ anon ]
FEF4B000 4 4 - - rw--- libsocket.so.1
FEF50000 268 84 - - r-x-- libm.so.2
FEFA2000 16 8 - - rwx-- libm.so.2
FEFC0000 4 4 - - rwx-- [ anon ]
FEFC3000 160 160 - - r-x-- ld.so.1
FEFF0000 4 4 4 - rwx-- [ anon ]
FEFF8000 4 4 - - rwxs- [ anon ]
FEFFB000 8 8 4 - rwx-- ld.so.1
FEFFD000 4 4 4 - rwx-- ld.so.1
-------- ------- ------- ------- -------
total Kb 2628 2204 64 -
What I am interested in is the anon for each pmap is the total at the bottom for the Anon column. I want to output this data in csv format for use inside an excel spreadsheet where I can graph the data.
So the output format need to be
pid,anonmemtotal,anonmemtotal,anonmemtotal,anonmemtotal
pid,anonmemtotal,anonmemtotal,anonmemtotal,anonmemtotal
pid,anonmemtotal,anonmemtotal,anonmemtotal,anonmemtotal
etc
I have started writing a script to do that which is below, but I cant figure out how I will get the pid and mem total appended to the same line each time?
#!/bin/bash
ls -l /root/pmaptest/ | awk '{print $8}' > /root/pmapdirs.txt
for dir in `cat /root/pmapdirs.txt`
do
cat /root/pmaptest/pmapdata$dir/var/tmp/pmapdata/psefo.txt | awk '{print $1}' > /root/pmaptest/pmapdata$dir/var/tmp/pmapdata/pids.txt
for pid in `cat /root/pmaptest/pmapdata$dir/var/tmp/pmapdata/pids.txt`
do
tail -1 /root/pmaptest/pmapdata$dir/var/tmp/pmapdata/pmap$pid.txt | awk {'print $5'}
done
done