pagemap和VSS/USS/PSS/RSS的计算

VSS/USS/PSS/RSS的计算

VSS/USS/PSS/RSS是什么

VSS、USS、PSS、RSS是衡量内存占用的四个指标:
- VSS:Virtual Set Size, 虚拟内存占用,包括共享库等。
- RSS:Resident Set Size,实际物理内存占用,包括共享库等。
- PSS:Proportion Set Size,实际使用的物理内存,共享库等按比例分配。
- USS:Unique Set Size,进程独占的物理内存,不计算共享库等的内存占用。

一般我们有VSS >= RSS >= PSS >= USS。

pagemap

以下内容主要摘录自内核文档(Documentation/vm/pagemap.txt)。
pagemap是内核自2.5.25引入的一组接口,使得用户空间的程序可以通过读取/proc文件来获取页表等相关信息。
pagemap由4个部分组成。

/proc/pid/pagemap

这个文件使得用户进程可以获得每个虚拟内存页和实际内存的映射关系。对于每一个虚拟页
* Bits 0-54 page frame number (PFN) if present
* Bits 0-4 swap type if swapped
* Bits 5-54 swap offset if swapped
* Bit 55 pte is soft-dirty (see Documentation/vm/soft-dirty.txt)
* Bit 56 page exclusively mapped (since 4.2)
* Bits 57-60 zero
* Bit 61 page is file-page or shared-anon (since 3.5)
* Bit 62 page swapped
* Bit 63 page present

如果一个页不在内存中,而被交换到swap空间,那么PFN中将包含交换文件好和偏移的编码。未映射的页将返回NULL。

使用/proc/pid/maps可以确定哪些页是真正映射的,然后通过llseek来跳过未映射的页。

/proc/kpagecount

该文件包含了每一个页面映射次数,使用64位表示,通过PFN索引。

/proc/kpageflags

该文件记录了每一个页面的flags,使用64位表示,通过PFN索引。
这些标记是(fs/proc/page.c):

 0. LOCKED
 1. ERROR
 2. REFERENCED
 3. UPTODATE
 4. DIRTY
 5. LRU
 6. ACTIVE
 7. SLAB
 8. WRITEBACK
 9. RECLAIM
10. BUDDY
11. MMAP
12. ANON
13. SWAPCACHE
14. SWAPBACKED
15. COMPOUND_HEAD
16. COMPOUND_TAIL
17. HUGE
18. UNEVICTABLE
19. HWPOISON
20. NOPAGE
21. KSM
22. THP
23. BALLOON
24. ZERO_PAGE
25. IDLE

/proc/kpagegroup

只有在配置CONFIG_MEMCG时,才包含该文件。该文件包含一个通过PFN索引的64位值,表明该页所归属的memory cgroup。

pagemap接口的使用

通过pagemap计算进程的内存使用一般流程如下:
1、通过读取/proc/pid/maps来确定哪一部分内存空间映射到哪里。
2、选取你感兴趣的内存部分-所有?特定的库?还是堆、栈等等。
3、打开/proc/pid/pagemap,跳转到你需要检查的部分。
4、读取每一

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值