Android内存之VSS/RSS/PSS/USS

举报
ShaderJoy 发表于 2021/12/30 00:16:22 2021/12/30
【摘要】 Terms VSS - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存)PSS - Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)USS - ...

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


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



文章来源: panda1234lee.blog.csdn.net,作者:panda1234lee,版权归原作者所有,如需转载,请联系作者。

原文链接:panda1234lee.blog.csdn.net/article/details/52291588

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。