作为Android系统工程师,常年在不同产品项目上会遇到各种内存泄漏,可能是某个应用,可能是framework层的定制化模块,又或者是某个native的进程。那么遇到这样的问题我们有哪些工具可以使用呢?
相关基础知识
后面的章节将涉及到具体的工具,在此之前我们先看看几个基础的概念:
- VSS - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存) RSS - Resident Set Size
- 实际使用物理内存(包含共享库占用的内存) PSS - Proportional Set Size
- 实际使用的物理内存(比例分配共享库占用的内存) USS - Unique Set Size
- 进程独自占用的物理内存(不包含共享库占用的内存)
一般来说内存占用大小有如下规律:VSS >= RSS >= PSS >= USS,如果是看某个进程的独占内存,一般用USS,若要考虑到共享库内存的情况,则可以参考PSS,接下来我们看看具体的工具。
具体的调试工具
procrank
procrank命令可以用来查看当前系统各进程内存(VSS/RSS/PSS/USS)使用快照。
执行命令“procrank”的部分信息如下:
procmem
procmem可以用来查看系统某一个进程的内存(VSS/RSS/PSS/USS)使用情况。可以用ps或者上文介绍的procrank查看进程pid
执行命令“procmem pid”的部分信息如下: