因调试某个重大问题,怀疑到了内存,专门写了个測试脚本。记录一下。

撰写不易,转载请注明出处:http://blog.csdn.net/jscese/article/details/37928823

一.调试准备

首先须要开启android系统的adb功能。start adbd

PC端 adb connect IP ADDRESS

假设 出现adb 异常能够尝试 adb kill-serveradb start-server

二.adb shell指令

1.查看总体内存

连上adb之后 能够通过 adb shell procrank 来查看当前的内存情况!

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvanNjZXNl/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

  • VSS - Virtual Set Size 虚拟耗用内存(包括共享库占用的内存)
  • RSS - Resident Set Size 实际使用物理内存(包括共享库占用的内存)
  • PSS - Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)
  • USS - Unique Set Size 进程独自占用的物理内存(不包括共享库占用的内存)

2.查看指定进程的内存情况

adb shell dumpsys meminfo (包名或者PID)

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvanNjZXNl/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">





3.占用内存最多的进程或线程

adb shell top

显示当前占用最高内存的10个进程,adb shell top -m 10

查看线程:adb shell top -t -m 10

三.shell 脚本

用于实时监控内存使用情况。而且保存log,我的shell script:

    #!/bin/bash
echo "Begain test memory">memeory_recode.txt
i=0
while true; do adb shell procrank |grep 'RAM:'| tee -a memeory_record.txt memoryinfo=$(tail memeory_record.txt -n 1)
#freememory=$memoryinfo | cut -d ' '-f 4 freememory=`echo "$memoryinfo"|awk -F ' ' '{print $4}'` free=${freememory%? } if [ $free -lt 8000 ];then
echo -e "\033[31mFree Memory is $free KB Less than 8M\033[0m"| tee -a memeory_recode.txt
adb shell top -m 10 -n 1 | tee -a memeory_recode.txt
else
echo "freememory == $free KB"
fi i=$(($i+1)) sleep 1 var=$(date)
echo "jscese display memory at $var the $i times"
echo
done

保存RAM信息的情况到 memeory_record.txt。而且解析freememory 的值,假设少于8000K就把占用内存最高的10个进程信息也保存进record。

四.build.prop中的Dalvik设置

dalvik.vm.heapstartsize=8m
dalvik.vm.heapgrowthlimit=96m
dalvik.vm.heapsize=256m
dalvik.vm.heaptargetutilization=0.75
dalvik.vm.heapminfree=512k
dalvik.vm.heapmaxfree=8m
dalvik.vm.lockprof.threshold=500
dalvik.vm.dexopt-flags=m=y

这几个属性代表了对dalvik的一些属性设置,能够在/dalvik/vm/alloc/HeapSource.cpp下找到原型:

struct HeapSource {
/* Target ideal heap utilization ratio; range 1..HEAP_UTILIZATION_MAX
*/
size_t targetUtilization; /* The starting heap size.
*/
size_t startSize; /* The largest that the heap source as a whole is allowed to grow.
*/
size_t maximumSize; /*
* The largest size we permit the heap to grow. This value allows
* the user to limit the heap growth below the maximum size. This
* is a work around until we can dynamically set the maximum size.
* This value can range between the starting size and the maximum
* size but should never be set below the current footprint of the
* heap.
*/
size_t growthLimit; /* The desired max size of the heap source as a whole.
*/
size_t idealSize; /* The maximum number of bytes allowed to be allocated from the
* active heap before a GC is forced. This is used to "shrink" the
* heap in lieu of actual compaction.
*/
size_t softLimit; /* Minimum number of free bytes. Used with the target utilization when
* setting the softLimit. Never allows less bytes than this to be free
* when the heap size is below the maximum size or growth limit.
*/
size_t minFree; /* Maximum number of free bytes. Used with the target utilization when
* setting the softLimit. Never allows more bytes than this to be free
* when the heap size is below the maximum size or growth limit.
*/
size_t maxFree; ... }

大体相应的意思例如以下:

1.heapstartsize——堆初始分配的大小,一个app启动的时候分配的内存大小

2.heapgrowthlimit——分配的一个堆最大的增长值,一个app最多分配的内存大小,超出的话应该会报outofmemory

3.heapsize——整个堆所能达到的最大值。也就是应用程序所能用的内存总和

4.heaptargetutilization——代表堆的利用率,实际使用与最大利用对照

5.heapminfree——堆大小的限制因素,在堆的大小没超过限定值的情况下 最小的空暇值

6.heapmaxfree——和最小相反,堆中最多能空暇的大小

7.lockprof.threshold——调试记录程序内部锁资源争夺的阈值,默认值是500

8.dexopt-flags——程序代码的校验与优化,下面来自百科:

dalvik.vm.dexopt-flags:
本參数控制Dalvik虚拟机的程序代码校验和优化。可填写的值有m、v和o。 m为标准选项。能够是m=y或m=n。若m=y则启用不安全代码的校验和托管代码的优化。兼容性和安全性最高,推荐使用。 v为校验选项,可与o并存。能够是v=a或v=n。若v=a则表示校验全部代码,v=n则关闭代码的校验。

 o为优化选项,可与v并存。能够是o=v或o=a。若o=v则表示优化以校验过的代码,o=a则表示优化全部代码。 比如: dalvik.vm.dexopt-flags=m=y dalvik.vm.dexopt-flags=v=n,o=v

注意,这个參数仅仅会影响到安装APK之后或初次使用APK时生成dex文件时有效。若整个系统(包含应用程序)为odex化,则无意义。

Android——内存调试的更多相关文章

  1. Android内存调试命令

    adb shell dumpsys meminfo 包名 比如: adb shell dumpsys meminfo cn.com.test

  2. Android内存泄露调试

    Android 内存泄漏调试 一.概述 如果我们编写的代码当中有太多的对内存使用不当的地方,难免会使得我们的设备运行缓慢,甚至是死机.为了能够使得 Android 应用程序安全且快速的运行, Andr ...

  3. Android内存性能优化(内部资料总结)

    eoe上看到的一个很好的文章 摘抄了下来留着自己看看 刚入门的童鞋肯能都会有一个疑问,Java不是有虚拟机了么,内存会自动化管理,我们就不必要手动的释放资源了,反正系统会给我们完成.其实Java中没有 ...

  4. Android内存性能优化(内部资料总结) eoe转载

    刚入门的童鞋肯能都会有一个疑问,Java不是有虚拟机了么,内存会自动化管理,我们就不必要手动的释放资源了,反正系统会给我们完成.其实Java中没有指针的概念,但是指针的使用方式依然存在,一味的依赖系统 ...

  5. Android编程: 调试方法

    学习知识:Android的调试方法 ====调试方法==== 前提: IDE环境为Android Studio,熟悉LogCat,知道如何查看日志信息 工具: Android DDMS调试工具,一般点 ...

  6. android 内存优化以及性能优化相关问题

    最近做一个android 的应用程序 总是出现内存高 和cpu高的问题困扰了好多天. 下面为自己从网上总结的和自己找到的问题. 1. WebView  控件: 使用了 WebView 控件一定要注意清 ...

  7. 深入理解Android内存管理原理(六)

    一般来说,程序使用内存的方式遵循先向操作系统申请一块内存,使用内存,使用完毕之后释放内存归还给操作系统.然而在传统的C/C++等要求显式释放内存的编程语言中,记得在合适的时候释放内存是一个很有难度的工 ...

  8. Android 内存管理分析(四)

    尊重原创作者,转载请注明出处: http://blog.csdn.net/gemmem/article/details/8920039 最近在网上看了不少Android内存管理方面的博文,但是文章大多 ...

  9. Android内存性能优化(内部资料总结) 转

    刚入门的童鞋肯能都会有一个疑问,Java不是有虚拟机了么,内存会自动化管理,我们就不必要手动的释放资源了,反正系统会给我们完成.其实Java中没有指针的概念,但是指针的使用方式依然存在,一味的依赖系统 ...

随机推荐

  1. 转:requirejs2.0新特性介绍

    就在前天晚上RequireJS发布了一个大版本,直接从version1.0.8升级到了2.0.随后的几小时James Burke又迅速的将版本调整为2.0.1,当然其配套的打包压缩工具r.js也同时升 ...

  2. 小小换行符乱谈(文本文件vs二进制文件)

    使用 C 语言的 fopen 打开文件时,可以指定的 mode 有 12 个,其中 6 个包含  "b" 使用 C++ 的 fstream 打开文件时,可用的模式组合有 24 个( ...

  3. ALEXANDER WANG 北京旗舰店开业活动

    ALEXANDER WANG 北京旗舰店开业活动-搜狐女人 ALEXANDER WANG 北京旗舰店开业活动

  4. mysql记录慢查询

    1,配置开启 Linux: 在mysql配置文件my.cnf中增加 log-slow-queries=/var/lib/mysql/slowquery.log (指定日志文件存放位置,可以为空,系统会 ...

  5. 深度学习大牛Yoshua Bengio

    深度学习大牛Yoshua Bengio今天AAAI四小时深度学习教学讲座非常详尽,PPT有230页:http://t.cn/zQ4VRVx 如觉太长,可看他33页综述文:http://t.cn/zjk ...

  6. SQL常用语句集合(不断更新)

    1.多条件 查询 上下级 所有数据 select * from OrgUnit where (ParentId = '3' or OrgId='3' or ParentId in (select Or ...

  7. 【Eclipse】报错提示删掉@Override

    是因为项目的JRE System Library版本不对,点击Edit进入Edit Library 界面,因为项目默认是使用Eclipse自带的jdk版本(Workspace default JRE) ...

  8. 【JQuery Plugin】WdatePicker

    <div class="timeSelect reportDate"> <span>查询时间:</span> <input type=&q ...

  9. hdu2629Identity Card

    Problem Description Do you own an ID card?You must have a identity card number in your family's Hous ...

  10. jquery的slideUp、slideDown、slideToggle等涉及滑动效果的一系列函数,在IE浏览器下有几处bug

    jquery的slideUp.slideDown.slideToggle等涉及滑动效果的一系列函数,在IE浏览器下有几处bug: 1. 因position引起的问题 影响:IE全系列 症状:在需要sl ...