pmrep: update TODO, man page
[pcp.git] / qa / 040
blob44cc101cd246dc24f9cefc4c2edb9e58cf29964c
1 #! /bin/sh
2 # PCP QA Test No. 040
3 # mem leak in pmlogger
5 # Copyright (c) 1995-2002 Silicon Graphics, Inc. All Rights Reserved.
8 seq=`basename $0`
9 echo "QA output created by $seq"
11 # get standard filters
12 . ./common.product
13 . ./common.filter
14 . ./common.check
16 trap "$sudo rm -f $tmp.*; exit" 0 1 2 3 15
17 rm -f $seq.full
19 if ps l -p 1 2>/dev/null | sed -e 1q | grep RSS >/dev/null
20 then
21 ps_arg=l
22 elif ps -l -p 1 2>/dev/null | sed -e 1q | grep RSS >/dev/null
23 then
24 ps_arg=-l
25 elif ps -o uid,pid,rss,fname -p 1 2>/dev/null | sed -e 1q | grep RSS >/dev/null
26 then
27 ps_arg="-o uid,pid,rss,fname"
28 else
29 echo "$seq: how do I coerce RSS from your ps?"
32 rss_field=`ps $ps_arg -p 1 2>/dev/null | $PCP_AWK_PROG '
33 NR == 1 { for (i = 1; i <= NF; i++) {
34 if ($i ~ /RSS/) {
35 print i
36 break
39 exit
40 }'`
42 # real QA test starts here
44 rm -f $tmp.*
45 cat <<End-of-File >$tmp.config
46 log mandatory on 20 msec {
47 pmcd.control
49 End-of-File
51 #debug# _start_up_pmlogger -c $tmp.config -Daf,appl2,desperate -l $tmp.log -s 1000 $tmp
52 _start_up_pmlogger -c $tmp.config -l $tmp.log -s 1000 $tmp
53 mylogger=$pid
54 _wait_for_pmlogger $mylogger $tmp.log
56 seen=0
57 for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
59 sleep 1
60 ps $ps_arg -p $mylogger \
61 | $PCP_AWK_PROG '
62 NR == 1 { print; next }
63 $3 == '$mylogger' { print }'
64 done \
65 | tee $tmp.out \
66 | sed -e '/RSS/d' \
67 | $PCP_AWK_PROG '{ print $'$rss_field' }' \
68 | LC_COLLATE=POSIX sort \
69 | uniq -c \
70 | while read cnt sz
72 seen=`expr $seen + 1`
73 # expect one line, with a count of 15 sizes, all the same!
74 if [ $seen -gt 1 -o $cnt -ne 15 ]
75 then
76 echo "Error: pmlogger virtual or resident size grew ... memory leak?"
77 echo " or maybe pmlogger died, or failed to start"
78 echo " pmlogger pid=$mylogger seen=$seen cnt=$cnt"
79 echo
80 echo "ps output ..."
81 cat $tmp.out
82 echo
83 echo "pmlogger log ..."
84 cat $tmp.log
85 exit 1
87 done
89 echo "OK"
91 _wait_pmlogger_end $mylogger
92 cat $tmp.log >>$seq.full
93 echo
94 echo "pmlogger log"
95 _filter_pmlogger_log <$tmp.log
97 exit 0