随笔-java进行内存分析

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的时候调用此脚本

posted @ 2014-01-07 10:00  zymaxs  阅读(97)  评论(0编辑  收藏  举报