Android常用内存分析命令
一、概述
记录一些分析Android/Linux进程的内存占用、内存布局、内存空间结构的一些分析工具和方法。
1.1 内存指标概念
Item | 全称 | 含义 | 等价 |
---|---|---|---|
USS | Unique Set Size | 物理内存 | 进程独占的内存 |
PSS | Proportional Set Size | 物理内存 | PSS= USS+ 按比例包含共享库 |
RSS | Resident Set Size | 物理内存 | RSS= USS+ 包含共享库 |
VSS | Virtual Set Size | 虚拟内存 | VSS= RSS+ 未分配实际物理内存 |
- VSS >= RSS >= PSS >= USS
1.2 内存分析命令
常用的内存调优分析命令:
工具 | 描述 |
---|---|
top/htop | 最简单也是最粗略的工具,初步展示内存占用情况 |
vmstat | 除了展示内存外,还展示io、CPU等 |
cat /proc/meminfo | 查看系统全局内存统计 |
free | /proc/meminfo的精简版,粗略查看内存总体情况 |
procrank | 可以查看所有进程的VSS PSS RSS USS |
dumpsys meminfo | 可以查看进程PSS,提供oom killer的排序;可以查看系统全局,可以查看指定包;查看指定包时可以查看不同分类的内存,尤其是Java虚拟机(Android App)的进程可以看到Heap、Code、mmap、GFX、Native等各部分占用的内存 |
cat /proc/{$PID}/maps | 查看对应进程的虚拟内存映射空间;可以查看进程空间的结构、各部分地址空间的详细使用情况 |
cat /proc/{$PID}/smaps | maps的详细版 |
cat /proc/{$PID}/statm | 输出对应进程的内存信息,但是以页为单位 |
showmap | 基于maps和smaps做的一个统计和展示 |
procmem | 和showmap差不多,也是对某个进程查看详细内存结构 |
Profiler | 查看Java部分的内存,包括Heap、stack、code、mmap、Native的内存,提供Heap Profile能力 |
小结
- 查看Android App的详细内存占用,使用
dumpsys meminfo
、Profiler
可以查看详细的不同区域的内存使用情况;结合cat /proc/{$PID}/maps
(或者是基于它的工具如showmap
、procmem
)查看Linux级别的详细的内存布局,可以分析Android进程加载了哪些so、dex等,查看不同的内存区域。 - 粗略查看系统全局的内存,可以使用
free
、top
、vmstat
、cat /proc/meminfo
等 - 查看单个进程的总体内存占用,使用
procrank
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 PeaceMaker!
评论
DisqusWaline