VSS:Virtual Set Size,虚拟耗用内存。它是一个进程能访问的所有内存空间地址的大小。这个大小包含了
一些没有驻留在RAM中的内存,就像mallocs已经被分配,但还没有写入。VSS很少用来测量程序的实际使
用内存。
RSS:Resident Set Size,实际使用物理内存。RSS是一个进程在RAM中实际持有的内存大小。RSS可能会
产生误导,因为它包含了所有该进程使用的共享库所占用的内存,一个被加载到内存中的共享库可能有很
多进程会使用它。RSS不是单个进程使用内存量的精确表示。
PSS:Proportional Set Size,实际使用的物理内存,它与RSS不同,它会按比例分配共享库所占用的内存。
例如,如果有三个进程共享一个占30页内存控件的共享库,每个进程在计算PSS的时候,只会计算10页。
PSS是一个非常有用的数值,如果系统中所有的进程的PSS相加,所得和即为系统占用内存的总和。当一个
进程被杀死后,它所占用的共享库内存将会被其他仍然使用该共享库的进程所分担。在这种方式下,PSS
也会带来误导,因为当一个进程被杀后,PSS并不代表系统回收的内存大小。
USS:Unique Set Size,进程独自占用的物理内存。这部分内存完全是该进程独享的。USS是一个非常有用
的数值,因为它表明了运行一个特定进程所需的真正内存成本。当一个进程被杀死,USS就是所有系统回
收的内存。USS是用来检查进程中是否有内存泄露的最好选择,怀疑某个程序有内存泄露可以查看这个值是否一直有增加
# procrank
PID Vss Rss Pss Uss cmdline
1713 4490816K 166332K 85072K 76952K system_server
一般规律 VSS >= RSS >= PSS >= USS
top | grep app名称 只能查到VSS RSS内存占用信息
ps | grep app名称 只能查到VSS RSS内存占用信息
procrank | grep app名称 可以查出 PSS USS内存占用.
dumpsys meminfo app名称 可以查出 PSS USS内存占用.
dumpsys meminfo 可以查看native和dalvik分别占用多少内存
dumpsys 手机中所有应用程序的信息,并且给出现在手机的状态。
dumpsys [Option]
meminfo: 内存信息
cpuinfo: CPU信息
account: accounts信息
activity: 所有activities的信息
window: 键盘,窗口和它们的关系
wifi: wifi相关信息
例如:
# dumpsys meminfo system_server
Applications Memory Usage (in Kilobytes):
Uptime: 5335926 Realtime: 197741474
Pss Private Private SwapPss Heap Heap Heap
Total Dirty Clean Dirty Size Alloc Free
------ ------ ------ ------ ------ ------ ------
Native Heap 19713 19676 0 0 0 0 0
Dalvik Heap 15308 15208 0 0 0 0 0
Dalvik Other 7164 6668 0 0
Stack 68 68 0 0
Ashmem 88 64 0 0
Gfx dev 9688 516 9172 0
Other dev 36 0 8 0
.so mmap 9291 1268 3196 0
.jar mmap 11245 10704 0 0
.apk mmap 5586 3148 912 0
.ttf mmap 2 0 0 0
.dex mmap 191 0 0 0
Other mmap 232 4 96 0
GL mtrack 22848 22848 0 0
Unknown 3653 3648 0 0
TOTAL 105113 83820 13384 0 0 0 0
App Summary
Pss(KB)
------
Java Heap: 15208
Native Heap: 19676
Code: 19228
Stack: 68
Graphics: 32536
Private Other: 10488
System: 7909
TOTAL: 105113 TOTAL SWAP PSS: 0