gpt4 book ai didi

linux - 共享内存中的 Shared_dirty 与 Private_dirty

转载 作者:IT王子 更新时间:2023-10-29 01:08:25 24 4
gpt4 key购买 nike

我有一个使用共享内存的多进程应用程序。我正在尝试检测我的应用程序中的内存泄漏。我在/proc/$pid/smap 中找到了这个

 2b51cd2b2000-2b53b8aa4000 rw-s 00000000 00:09 17151225                   /dev/zero (deleted)
Size: 8052680 kB
Rss: 31608 kB
Shared_Clean: 1524 kB
Shared_Dirty: 25736 kB
Private_Clean: 0 kB
Private_Dirty: 4348 kB
Swap: 0 kB
Pss: 6945 kB

这是我分配的共享内存。(大小告诉这是我用mmap分配的)

在内存本身共享的上下文中,我试图理解共享/私有(private)之间的区别。参见 's' 标志。

如果有人能解释 Shared_Clean 与 Private_Clean 之间的区别共享内存上下文中的 Shared_Dirty 与 Private_Dirty。

最佳答案

Clean 和 Dirty 的区别是指页面在写入内存后是否已经写出到后备存储中。对于 /dev/zero 的映射,页面显然从不被写出,所以干净的页面只被读取而脏的页面被写入。

对于共享映射,私有(private)和共享之间的区别在于页面是否仅被您正在检查的进程引用,或者它们是否被多个进程引用。

总结一下:

  • Shared_Clean 是映射中已被此进程和至少一个其他进程引用但未被任何进程写入的页面;
  • Shared_Dirty 是映射中已被此进程和至少一个其他进程引用并由至少一个进程写入的页面;
  • Private_Clean 是映射中已读取但未被此进程写入但未被任何其他进程引用的页面;
  • Private_Dirty 是映射中已由该进程写入但未被任何其他进程引用的页面。

页面在被写入时可以从 Clean 移动到 Dirty,当另一个进程引用它们时可以从 Private 移动到 Shared。

如果您映射一个真实的磁盘文件,那么当页面被内核写出时,页面也可以从 Dirty 移动到 Clean。

关于linux - 共享内存中的 Shared_dirty 与 Private_dirty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33027341/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com