您当前的位置: 首页 >  android
  • 0浏览

    0关注

    674博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Android内存信息收集和内存泄露分析

沙漠一只雕得儿得儿 发布时间:2021-12-02 10:09:15 ,浏览量:0

1.术语

 

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

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

2.收集内存信息的方式

(1)dumpsys meminfo 进程名  效果同4

(2)top -m 5 -d 5 | grep 进程名

(3)使用ActivityManager的getMemoryInfo(ActivityManager.MemoryInfo outInfo)   主要是用于得到当前系统剩余内存的及判断是否处于低内存运行

(4)在代码中使用Debug的getMemoryInfo(Debug.MemoryInfo memoryInfo)或ActivityManager的MemoryInfo[] getProcessMemoryInfo(int[] pids)

该方式得到的MemoryInfo所描述的内存使用情况比较详细.数据的单位是KB.

MemoryInfo的Field如下

dalvikPrivateDirty: The private dirty pages used by dalvik。

dalvikPss :The proportional set size for dalvik.

dalvikSharedDirty :The shared dirty pages used by dalvik.

nativePrivateDirty :The private dirty pages used by the native heap.

nativePss :The proportional set size for the native heap.

nativeSharedDirty :The shared dirty pages used by the native heap.

otherPrivateDirty :The private dirty pages used by everything else.

otherPss :The proportional set size for everything else.

otherSharedDirty :The shared dirty pages used by everything else.

dalvik:是指dalvik所使用的内存。

native:是被native堆使用的内存。应该指使用C\C++在堆上分配的内存。

other:是指除dalvik和native使用的内存。但是具体是指什么呢?至少包括在C\C++分配的非堆内存,比如分配在栈上的内存。puzlle!

private:是指私有的。非共享的。

share:是指共享的内存。

PSS:实际使用的物理内存(比例分配共享库占用的内存)

(5)adb shell procrank(需要权限) 

(6)adb shell cat /proc/meminfo   不能分进程获取

(7)adb shell ps -x   效果同(2)

3.内存泄露分析

3.1 java层使用 hprof文件+MAT分析工具

  详见珍姐整理的Android端内存泄漏方法总结的第三部分:

3.2 native层 bionic

   对于Android的native进程, Android源码中的Bionic库提供了一个很棒的API,get_malloc_leak_info用来检测Native代码内存泄露。

   使用步骤:

       1、使用小米开发版手机(自带libc_malloc_debug_leak.so),若使用其他手机需确保/system/lib下有libc_malloc_debug_leak.so文件。

       2、命令行设置setprop libc.debug.malloc 1

       3、kill需要检测的进程,使这个property设置后生效。

       4、下载Dalvik debug monitor 18版本的tool文件夹,替换sdk目录下的tools,找到我们电脑home目录下的隐藏文件/home/user/.android在里面的ddms.cfg文件下加入一行native=true

       5、启动sdk/tools目录下的ddms.bat,出现以下窗口,可以显示进程的native heap信息。

       6、启动需要检测的进程,执行相关操作

       7、分析两次native heap信息的差别,可以辅助定位native 内存泄露问题。

关注
打赏
1657159701
查看更多评论
立即登录/注册

微信扫码登录

0.0489s