Android应用中经常遇到的问题就是内存溢出。因此,该问题需要投入更多的精力!

Android 的SDK提供了两种命令procrank和dumpsys meminfo [pid] 来查看当前内存的使用情况

$procrank

PID Vss Rss PssUsscmdline

935 68544K 42160K 19570K15840Ksystem_server 1002 37600K 35124K 14912K12804Koms.home 1221 33828K 33828K 12259K9440Kcom.android.phone 2537 31916K 31916K 11510K9324Kcom.android.Browser 2956 28768K 28768K 9034K7152Kcom.hiapk.market ... 854 268K 268K 89K84K/system/bin/servicemanager 859 444K 444K 86K28K/system/bin/sdm 920 268K 268K 85K80K/system/bin/cbmon 883 404K 404K 84K28K/system/bin/sdm 857 276K 276K 81K76K/system/bin/debuggerd $ dumpsys meminfo 2537
Currently running services:
meminfo
-----------------------------------------------------------------
DUMP OF SERVICE meminfo:
Applications Memory Usage (kB):
Uptime: 12697585 Realtime: 49787601

** MEMINFO in pid 2537 [com.android.browser] **
native dalvik other total
size: 6432 4295 N/A 10727
allocated: 5823 3142 N/A 8965
free: 4 1153 N/A 1157
(Pss): 3396 1858 6166 11420
(shared dirty): 1260 4872 692 6824
(priv dirty): 3332 1612 1608 6552

Objects
Views: 50 ViewRoots: 1
AppContexts: 2 Activities: 1
Assets: 3 AssetManagers: 3
Local Binders: 14 Proxy Binders: 73
Death Recipients: 2
OpenSSL Sockets: 0

SQL
heap: 275 dbFiles: 0
numPagers: 4 inactivePageKB: 82
activePageKB: 0
$

可以写一个shell脚本收集系统状态信息:leak.sh
#!/system/bin/sh while true; do data >> ./procrank.log procrank >> ./procrank.log echo >> ./procrank.log sleep 5 done 然后运行该脚本,收集系统信息后,根据收集到的系统信息判断是否可能存在内存溢出的问题。 (注:主要是查看 Uss列数据是否是处于增长状态) 如果是,则存在内存溢出的问题,这就需要我们对可能发生的溢出点进行定位。之后与网站的相同,借助Eclipse的一个插件mat,进行分析 首先获得占用内存最大的进程的快照,我们可以通过获得hprof文件实现。 如下: $chmod 777 /data/misc $kill -10 [pid] 这样将在/data/misc目录下生成一个带当前时间的hprof文件,比如 heap-dump-tm1275041385-pid2537.hprof 然后通过sdk提供的工具hprof-conv将hprof转换为mat可以读取的格式 $adb pull /data/mic/hprof文件 desktop/ $...sdk/tools$ hprof-conv /data/misc/hprof文件 pidA.hprof 只有用mat打开进行分析。为了更准确定位,需要多次生成快照进行对比,还是可以学习到很多知识! 同时,SDK还提供了获得内存信息的api,详情如下: ActivityManager activityManager =(ActivityManager) getSystemService(ACTIVITY_SERVICE); MemoryInfo info =new MemoryInfo(); activityManager.getMemoryInfo(info);

更多相关文章

  1. 一款常用的 Squid 日志分析工具
  2. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  3. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  4. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  5. android得到清单文件里meta标签的属性值
  6. Android题目笔记(二)
  7. app目录下的build.gradle详解
  8. Android(安卓)apk打包过程
  9. Android2.2的camera应用程序中支持双camera切换(二)

随机推荐

  1. JNI和NKD入门系列二,mac环境下配置NDk,并在
  2. Android中EditText 的setInputType以及se
  3. Android(安卓)后台进行长图的生成并分享(
  4. 简约之美Kotlin(二)Kotlin入门基础知识
  5. Android中的ThreadLocal源码解析
  6. Android 异步加载解决方案
  7. Android怎么在控制台输出语句
  8. Android Contact分析(一):Data, RawContact,
  9. Android性能优化-布局优化
  10. android如何导入已有数据库