summaryrefslogtreecommitdiff
path: root/qa/040
blob: 5182c01a38682e106bea9c831b67be8b8d35ee14 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#! /bin/sh
# PCP QA Test No. 040
# mem leak in pmlogger
#
# Copyright (c) 1995-2002 Silicon Graphics, Inc.  All Rights Reserved.
#

seq=`basename $0`
echo "QA output created by $seq"

# get standard filters
. ./common.product
. ./common.filter
. ./common.check

trap "$sudo rm -f $tmp.*; exit" 0 1 2 3 15

if ps l -p 1 2>/dev/null | sed -e 1q | grep RSS >/dev/null
then
    ps_arg=l
elif ps -l -p 1 2>/dev/null | sed -e 1q | grep RSS >/dev/null
then
    ps_arg=-l
elif ps -o uid,pid,rss,fname -p 1 2>/dev/null | sed -e 1q | grep RSS >/dev/null
then
    ps_arg="-o uid,pid,rss,fname"
else
    echo "$seq: how do I coerce RSS from your ps?"
fi

rss_field=`ps $ps_arg -p 1 2>/dev/null | $PCP_AWK_PROG '
NR == 1	{ for (i = 1; i <= NF; i++) {
	    if ($i ~ /RSS/) {
		print i
		break
	    }
	  }
	  exit
	}'`

# real QA test starts here

rm -f $tmp.*
cat <<End-of-File >$tmp.config
log mandatory on 5 msec {
    pmcd.control
}
End-of-File

_start_up_pmlogger -c $tmp.config -l $tmp.log -s 3000 $tmp
mylogger=$pid
_wait_for_pmlogger $mylogger $tmp.log

seen=0
for i in 1 2 3 4 5 6 7 8
do
sleep 1
ps $ps_arg -p $mylogger \
    | $PCP_AWK_PROG '
NR == 1			{ print; next }
$3 == '$mylogger'	{ print }'
done \
| tee $tmp.out \
| sed -e '/RSS/d' \
| $PCP_AWK_PROG '{ print $'$rss_field' }' \
| LC_COLLATE=POSIX sort \
| uniq -c  \
| while read cnt sz
do
    seen=`expr $seen + 1`
    # expect one line, with a count of 8 sizes, all the same!
    if [ $seen -gt 1 -o $cnt -ne 8 ]
    then
	echo "Error: pmlogger virtual or resident size grew ... memory leak?"
	echo "       or maybe pmlogger died, or failed to start"
	echo "       pmlogger pid=$mylogger seen=$seen cnt=$cnt"
	echo
	echo "ps output ..."
	cat $tmp.out
	echo
	echo "pmlogger log ..."
	cat $tmp.log
	exit 1
    fi
done

echo "OK"

_wait_pmlogger_end $mylogger
echo
echo "pmlogger log"
_filter_pmlogger_log <$tmp.log

exit 0