Android内存之VSS/RSS/PSS/USS

网友投稿 962 2022-05-29

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是最佳观察数据。

Android内存之VSS/RSS/PSS/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

#

Android 任务调度 漏洞扫描服务

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Android5.0之Activity的转场动画
下一篇:【云驻共创】一文入门物联网应用开发
相关文章