smem在Android中的使用

 

简介:

smem是一个分析linux上内存使用量的内存工具。Android上提供的“ps”只能显示VSIZERSS这两类内存值。即使安装了busybox,“ps”也只能显示VSIZEVSIZE是虚拟图形的总体大小,RSSresident set size——实际使用的物理内存(包含共享库占用的内存)。这些数据对于显示某一特定的应用程序或守护进程的实际内存消耗来讲,是没有太多的用处的。

smem网站上说:

smem是一个能给出大量关于在linux系统上的内存使用报告的工具。不同于现有的工具的是,smem能报告PSS,即proortional set size实际使用的物理内存(比例分配共享库占用的内存),这一数据能更有效的陈述某一特定类库和应用程序在虚拟存储系统中的内存使用情况。

因为大部分的物理内存通常情况下是被多个应用程序所共享的,所以被认为是衡量内存使用标准的RSSresident set size:实际使用物理内存,含共享库占用的内存)将明显地高估了内存使用。相反的,为了给出一个现实的措施,PSS权衡每一个应用公平地分享所有的共享区。

 

前期准备:

1、  合适的内核 (>2.6.27 or so) 查看当前内存版本可用“uname -a

2、  合适的Python版本 (2.4 or so) 查看版本号可用“python -V

另外,smem还可以产生非常漂亮的图表,为此,你还需安装python-matplotlib python-matplotlib-tk

        $ sudo apt-get install python-matplotlib python-matplotlib-tk

 

一、下载并编译

     先用hg工具将已经存在的smem仓库拷贝到本地PC

$ hg clone http://selenic.com/repo/smem

root权限将smem可执行文件拷贝到bin下面 设置路径

$ sudo cp smem/smem /usr/local/bin

agccsmemcap.c进行交叉编译

$ cd smem

$ agcc smemcap.c –o android-smemcap

注:agcc为封装了arm-eabi-gccperl脚本,地址为http://plausible.org/andy/agcc,使用时需将其全文复制下来后修改脚本的权限。运行agcc前除linux上已安装了perl解析器外,还需先在Android源码中执行build/envsetup.shchoosecomboAndroid环境配好。此外也可直接用arm-eabi-gcc直接进行交叉编译,示例可参考http://android-tricks.blogspot.com/2009/02/hello-world-c-program-on-using-android.html

 

二、安装android-smemcap

adb shell登录手机后创建所需的目录结构

$ adb shell mkdir /data/smem

将编译好的android-smemcap推送到手机中的目录

$ adb push android-smemcap /data/smem

修改执行文件的权限

$ adb shell chmod 777 /data/smem/android-smemcap

 

三、收集内存信息

进入手机相应的目录

$ adb shell

$ cd /data/smem

运行可执行文件并将结果重定向

$ ./android-smemcap > memdata.tar

$ exit

或直接执行如下命令:

$ adb shell “/data/smem/android-smemcap > /data/smem/memdata.tar”

 

四、将收集到的数据取回到PC

$ adb pull /data/smem/memdata.tar

 

五、审阅数据

*目标程序进程数据视图

$ smem –S memdata.tar

         *显示饼图

                   $ smem -S memdata.tar  - -pie=command

                   或指定显示某一应用程序

                   $ smem -S memdata.tar -P com.*  - -pie=command

         *显示柱状图

                   $smem -S memdata.tar -bar=command

         *显示系统中 所有的内存映射

                   $smem -S memdata.tar -m

         *显示指定程序的映射

                   $smem -S memdata.tar -m -P email

         *显示系统库

                   $smem -S memdata.tar -m -M /system/lib/*

         *显示应用软件包的内存映射

                   $smem -S memdata.tar -m -M .*.apk

         *找到拥有最大用户量得类库

                   $ smem -S memdata.tar -m -M lib -s pids

 

六、部分数据名称解释

a)         VSS - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)

b)         RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存)

c)         PSS - Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)

d)         USS - Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)

一般来说内存占用大小有如下规律:VSS >= RSS >= PSS >= USS

PS:打包的tools.zip附件中包含了agcc脚本和已编译好的android-smemcap.

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值