n=$1
if [ -z $n ];
then
n=10
fi
pid=`jps -lv|grep Server|awk '{print $1}'`
jmap -histo:live $pid >jmap1.txt
sleep 10
jmap -histo:live $pid >jmap2.txt
cat jmap1.txt|sed 's/\[/\\[/g' >fjmap1.txt
cat jmap2.txt|sed 's/\[/\\[/g' >fjmap2.txt
obj_l=`cat fjmap2.txt |sed -n '4,$p'|awk {'print $4 '}|head -n $n`
objnum_l=`cat fjmap2.txt |sed -n '4,$p'|awk {'print $3 '}|head -n $n`
objcount_l=`cat fjmap2.txt |sed -n '4,$p'|awk {'print $2 '}|head -n $n`
#echo $obj_l
i=1
for obj in $obj_l
do
echo No.$i:
target=`echo $obj|awk {'print $1'}`
echo $target
num2=`echo $objnum_l|cut -d " " -f $i`
num1=`cat fjmap1.txt |sed -n '4,$p'|grep "$target"|head -n 1|awk {'print $3'}`
count2=`echo $objcount_l|cut -d " " -f $i`
count1=`cat fjmap1.txt |sed -n '4,$p'|grep "$target"|head -n 1|awk {'print $2'}`
if [ -z $num2 ];then
num2=0
fi
if [ -z $num1 ];then
num1=0
fi
if [ -z $count2 ];then
count2=0
fi
if [ -z $count1 ];then
count1=0
fi
num=`expr $num2 - $num1`
echo "charge_heap:$num"
count=`expr $count2 - $count1`
echo "charge_count:$count"
((i=i+1))
done
#echo `cat jmap1.txt |grep javax.xml.namespace.QName|head -n 1|awk {'print $3'}`
建议可以在java出现fgc的时候调用此脚本