Android内存监控点滴

在android测试过程中,我们通常需要监控内存使用情况,有时候还需要我们去dump Hprof文件,在dump hprof文件之前需要做cause GC。这些我们都是通过android sdk的monitor(ddms)来完成的。

我们肯定会碰到这种情况,在CI中,我们需要监控手机的内存使用情况,如果有问题自动cause GC和dump hprof文件,今天我就介绍一下,由于不能把全部代码贴出来,这里仅仅是个思路,因为不难做,所以应该做过框架的同学们应该很熟系,这里就不贴代码了。


1. 安装gnuplot

sudo apt-get install gnuplot-x11


2. 适用dump meminfo来dump 内存适用状况

 adb shell dumpsys meminfo <package name>

比如:

 adb shell dumpsys meminfo com.android.settings

Applications Memory Usage (kB):
Uptime: 59463187 Realtime: 144534268

** MEMINFO in pid 25956 [com.android.settings] **
                         Shared  Private     Heap     Heap     Heap
                   Pss    Dirty    Dirty     Size    Alloc     Free
                ------   ------   ------   ------   ------   ------
       Native       16       16       16    10716     7275     2832
       Dalvik    11046     5740    10876    11448     8590     2858
        Stack       84        0       84                           
       Cursor        0        0        0                           
       Ashmem        0        0        0                           
    Other dev     5076       60     5072                           
     .so mmap     1664     2576     1308                           
    .jar mmap        0        0        0                           
    .apk mmap       27        0        0                           
    .ttf mmap        0        0        0                           
    .dex mmap       89        0        0                           
   Other mmap       10       12        8                           
      Unknown     6025      432     6016                           
        TOTAL    24037     8836    23380    22164    15865     5690
 
 Objects
               Views:      226         ViewRootImpl:        1
         AppContexts:        4           Activities:        2
              Assets:        8        AssetManagers:        8
       Local Binders:       23        Proxy Binders:       34
    Death Recipients:       12
     OpenSSL Sockets:        0
 
 SQL
         MEMORY_USED:        0
  PAGECACHE_OVERFLOW:        0          MALLOC_SIZE:        0
 
 
 Asset Allocations
    : 1K
    zip:/data/app-skin/com.sonyericsson.blackthemeblueaccent/com.sonyericsson.uxp.zip:/resources.arsc: 1K

3. 解析Dalvik,Native 和 Total等

比如dalvik 的Heap Allocated很重要,我们就可移这样

adb shell dumpsys meminfo com.android.settings | grep Dalvik | awk -F " " '{print $6} >> dalvik_allocted.txt

当然要做个循环,比如3秒钟一个循环,不停的写直到被停止为,在捕获停止CTRL+C之后(trap my_exit_handle SIGQUIT SIGKILL),自动调用gnuplot来绘图

4. 画内存使用图

这里给出一个实例:

gnuplot_script

set term png small size 800,600
set output "mem-dalvik_allocated-graph.png"
set title "Memory monitor"
set ylabel "KB"

plot "dalvik_allocated.txt" s c

然后用gnuplot gnuplot_script就可移画出来这个内存状况图


5. Cause GC(内存垃圾强制回收)

适用ddmlib里面的Client接口executeGarbageCollector就可以,用com.android.ddmlib.IDevice#getClients()得到当前进程的client实例,然后再用Client的这个executeGarbageCollector接口即可cause GC

需要写一个jar来做。


6. 自动dump hprof文件,这个有现成的命令

 adb shell am dumpheap <package name> <path to save>

例如:

 adb shell am dumpheap com.android.settings /sdcard/settings.hprof


7. 决定什么时候dump hprof,一般我们会判断我们的total private dirty / Growth Limited Davik size

可以通过adb shell getprop dalvik.vm.heapgrowthlimit获得

这样我们就完成了监控抓取的整个过程。


:)




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值