在android的SDK的开发过程中,经常会遇到内存泄漏的问题,这时候,我们需要一些手段进行排查定位。有时候,泄漏问题可能不是十分明显,需要长时间拷机才现复现到,这时候,我们可以让机器拷机时同步执行一些脚本,记录每个时间段内存情况,便于我们进一步分析。
下面的脚本,获取每5分钟的meminfo,ps进程情况:
#!/system/bin/sh
INTERVAL=300
TIME=$(date "+%Y%m%d-%H%M")
PROC_MEMINFO=/sdcard/rk/$TIME/proc_meminfo.txt
DUMP_MEMINFO=/sdcard/rk/$TIME/dump_meminfo.txt
PS=/sdcard/rk/$TIME/ps.txt
COUNT=1
SLAB=/sdcard/rk/$TIME/slabinfo.txt
mkdir -p /sdcard/rk/$TIME
#echo `date >> $LOG`
#echo `date >> $SLAB`
while((1));do
#echo `cat /proc/meminfo | busybox grep -E "Slab|SReclaimable|SUnreclaim" >> $MEMINFO`
#echo `cat /proc/slabinfo >> $SLAB`
NOW=`date`
TIME_LABEL="\n$NOW:--------------------------------------------------:$COUNT"
echo -e $TIME_LABEL >> $PROC_MEMINFO
`cat /proc/meminfo >> $PROC_MEMINFO`
echo -e $TIME_LABEL >> $DUMP_MEMINFO
`dumpsys meminfo >> $DUMP_MEMINFO`
echo -e $TIME_LABEL >> $PS
`ps >> $PS`
COUNT=$(expr $COUNT + 1 )
sleep $INTERVAL
done
把脚本push到/data/目录,chmod +x添加执行权限,然后在拷机时,同步运行此脚本。便会在/sdcard/rk目录下,记录拷机时的一些状态信息,这些信息,有助于我们定位哪几个进程有可能发生内存泄漏。