Android内存分析之procrank命令

procrank命令简介

procrank是/system/xbin/下的一个命令,在整机开发的时候,使用该命令查看应用进程的内存情况很方便。但是这个命令正常在debug/eng模式编译的时候才有,如果你是做第三方应用开发,如果可以root的手机的话,通过往该手机中push该命令,应该也可以使用该命令。

C:\Users\hai.qin>adb shell
K700AN:/ # which procrank
/system/xbin/procrank

procrank命令输出

执行procrank命令可以看到如下输出:

$ adb shell procrank
  PID       Vss      Rss      Pss      Uss     Swap    PSwap    USwap    ZSwap  cmdline
19463  1876424K  176128K   49493K   35400K    8952K    4827K    4652K    1650K  system_server
19595  1282664K  163112K   41045K   28216K   12428K    8236K    8060K    2816K  com.android.systemui
25401  1258300K  121836K   28611K   18552K   27728K   23593K   23420K    8068K  com.android.launcher3
21342  1254156K  132608K   25632K   15012K   34224K   30012K   29836K   10263K  com.android.settings
 8649  1214196K  120172K   21593K   14092K   16232K   12059K   11884K    4123K  com.android.dialer
19766  1201056K   85156K   12436K    8404K    6500K    1997K    1800K     683K  com.android.phone
19585  1170636K  100872K   10411K    5412K   13224K    8843K    8656K    3024K  com.android.inputmethod.latin
 7572  1198340K  103136K    9585K    1036K   11404K    7170K    6988K    2451K  com.android.systemui:screenshot
 ......

上面输出列表是根据不同进程的内存占用情况,从大到小的顺序排列的。这里主要需要关注的是Vss、Rss、Pss、Uss这4个参数,来了解下它们的含义。

1、Vss

Vss与PS的VSIZE相同是单个进程全部可访问的地址空间
其大小包括可能还尚未在内存中驻留的部分。比如地址空间已经被 malloc 分配,但是还没有实际写入。
对于确定单个进程实际内存使用大小, VSS 用处不大。

2、Rss

RSS是单个进程实际占用的内存大小。
RSS易被误导的原因在于, 它包括了该进程所使用的所有共享库的全部内存大小。对于单个共享库, 尽管无论多少个进程使用,
实际该共享库只会被装入内存一次。
对于单个进程的内存使用大小, RSS 不是一个精确的描述。

3、Pss

PSS 不同于RSS,它只是按比例包含其所使用的共享库大小。
例如, 三个进程使用同一个占用 30 内存页的共享库。 对于三个进程中的任何一个,PSS 将只包括 10 个内存页。
PSS 是一个非常有用的数字,因为系统中全部进程以整体的方式被统计, 对于系统中的整体内存使用是一个很好的描述。
如果一个进程被终止, 其PSS 中所使用的共享库大小将会重新按比例分配给剩下的仍在运行并且仍在使用该共享库的进程。
此种计算方式有轻微的误差,因为当某个进程中止的时候,PSS没有精确的表示被返还给整个系统的内存大小。

4、Uss

USS 是单个进程的全部私有内存大小。亦即全部被该进程独占的内存大小。
USS 是一个非常非常有用的数字, 因为它揭示了运行一个特定进程的真实的内存增量大小。
如果进程被终止, USS 就是实际被返还给系统的内存大小。
USS 是针对某个进程开始有可疑内存泄露的情况,进行检测的最佳数字。

小结

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

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

参考资料

  1. 性能之procrank命令

你可能感兴趣的:(命令行)