计算某个人物的heap占多少个page
taskname=$1
#为了更方便的对16进制的地址进行运算需要进行16<-->10进制转换
DecToHex()
{
echo $(printf "%x" $1)
}
HexToDec()
{
echo $(printf "%d" 0x$1)
}
####################
pid=$(ps aux | grep $taskname| grep -v grep | awk '{print $2}')
echo $pid
heapmaps=$(cat /proc/$pid/smaps | grep heap)
start=$(echo $heapmaps| awk -F '[ -]' '{print $1}')
starthex="0x"$start
end=$(echo $heapmaps| awk -F '[ -]' '{print $2}')
endhex="0x"$end
echo starthex=$starthex endhex=$endhex
startdec=$(HexToDec $starthex)
enddec=$(HexToDec $endhex)
echo startdec=$startdec enddec=$enddec
i=0
while [ $startdec -le $enddec ]
do
startdec=$(($startdec+4096)) #pagesize=4k
start=$(DecToHex $startdec)
starthex="0x"$start
#echo starthex=$starthex
i=$(($i+1))
done
echo "there are $i pages"
用法:sumHeapPages.sh test
此脚步用于计算一个任务heap所占用的pages。