分享

Android内存之VSS/RSS/PSS/USS

 quandsu 2018-04-26

Terms

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

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

Overview

本篇文章的目的是为了帮助理解从多种工具导出的关于Linux进程真实占用内存的报告。

Android 有一个叫做 procrank (/system/xbin/procrank)的工具,它可以从高到低地列出Linux进程的内存占用量 。 每个进程按大小可以分为 VSS, RSS, PSS, 和USS.


为了简化描述,以下内存将以“页”的形式来表示,而不是“字节”。像我们的Linux系统内存管理中最低级别的页有4096 字节。


VSS (reported as VSZ from ps) 是一个进程总共可访问的地址空间其大小还包括了可能不在RAM中的内存(比如虽然malloc分配了空间,但尚未写入)。 VSS 很少被用于判断一个进程的真实内存使用量。


RSS 是一个进程在RAM中真实存储的总内存但是RSS还是可能会造成误导,因为它仅仅表示该进程所使用的所有共享库的大小,它不管有多少个进程使用该共享库,该共享库仅被加载到内存一次。所以RSS并不能准确反映单进程的内存占用情况。 


PSS 与RSS不同,它按比例表示使用的共享库, 例如:如果有三个进程都使用了一个共享库,共占用了30页内存。那么PSS将认为每个进程分别占用该共享库10页的大小。 PSS是非常有用的数据,因为系统中所有进程的PSS都相加的话,就刚好反映了系统中的总共占用的内存。 而当一个进程被销毁之后, 其占用的共享库那部分比例的PSS,将会再次按比例分配给余下使用该库的进程。这样PSS可能会造成一点的误导,因为当一个进程被销毁后,PSS不能准确地表示返回给全局系统的内存(the memory returned to the overall system)。


USS 是一个进程所占用的私有内存。即该进程独占的内存。 USS是非常非常有用的数据,因为它反映了运行一个特定进程真实的边际成本(增量成本)。当一个进程被销毁后,USS是真实返回给系统的内存。当进程中存在一个可疑的内存泄露时,USS是最佳观察数据。


如果系统支持Python, 有一个叫做smem的工具,它能报告内存以上分类的统计信息。 


# procrank
procrank

  1. PID     Vss     Rss     Pss     Uss     cmdline  
  2. 481     31536K  30936K  14337K  9956K   system_server  
  3. 475     26128K  26128K  10046K  5992K   zygote  
  4. 526     25108K  25108K  9225K   5384K   android.process.acore  
  5. 523     22388K  22388K  7166K   3432K   com.android.phone  
  6. 574     21632K  21632K  6109K   2468K   com.android.settings  
  7. 521     20816K  20816K  6050K   2776K   jp.co.omronsoft.openwnn  
  8. 474     3304K   3304K   1097K   624K    /system/bin/mediaserver  
  9. 37      304K    304K    289K    288K    /sbin/adbd  
  10. 29      720K    720K    261K    212K    /system/bin/rild  
  11. 601     412K    412K    225K    216K    procrank  
  12. 1       204K    204K    185K    184K    /init  
  13. 35      388K    388K    182K    172K    /system/bin/qemud  
  14. 284     384K    384K    160K    148K    top  
  15. 27      376K    376K    148K    136K    /system/bin/vold  
  16. 261     332K    332K    123K    112K    logcat  
  17. 33      396K    396K    105K    80K     /system/bin/keystore  
  18. 32      316K    316K    100K    88K     /system/bin/installd  
  19. 269     328K    328K    95K     72K     /system/bin/sh  
  20. 26      280K    280K    93K     84K     /system/bin/servicemanager  
  21. 45      304K    304K    91K     80K     /system/bin/qemu-props  
  22. 34      324K    324K    91K     68K     /system/bin/sh  
  23. 260     324K    324K    91K     68K     /system/bin/sh  
  24. 600     324K    324K    91K     68K     /system/bin/sh  
  25. 25      308K    308K    88K     68K     /system/bin/sh  
  26. 28      232K    232K    67K     60K     /system/bin/debuggerd  
  27. #  



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多