Android内存之VSS/RSS/PSS/USS

网友投稿 1066 2025-03-31

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

Android内存之VSS/RSS/PSS/USS

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小时内删除侵权内容。

上一篇:Linux入门篇 —— Shell详解
下一篇:已是最新文章
相关文章