06 基础篇 | 进程的哪些内存类型容易引起内存泄漏?
该思维导图由 AI 生成,仅供参考
进程的地址空间
- 深入了解
- 翻译
- 解释
- 总结
本文详细介绍了进程的内存泄漏可能涉及的类型和相关知识。首先介绍了进程的地址空间、内存申请释放相关的函数以及不同的内存类型,包括私有匿名内存、共享匿名内存、私有文件映射和共享文件映射。进程虚拟地址空间通过Paging方式映射为物理内存,而虚拟地址空间同样存在内存泄漏的问题。了解了地址空间的相关知识后,读者可以对进程的地址空间做合理规划和控制。文章还介绍了观察进程内存的工具,如top和pmap,以及如何通过/proc/meminfo观察进程分配的内存和系统指标的关联。最后,总结了进程内存管理相关的基础知识,包括进程的虚拟内存与物理内存、进程内存类型的区分以及查看进程内存的方法。整体而言,本文为读者提供了深入了解和处理内存泄漏问题的基础,对于需要处理进程内存泄漏问题的技术人员具有重要参考价值。
《Linux 内核技术实战课》,新⼈⾸单¥59
全部留言(8)
- 最新
- 精选
- Geek_9bf0b0邵老师,对于私有文件映射的页面是file page还是anon page,是要区分文件本身是否可写入权限的吧。 如果该文件是不可写的,那么内核应该会把该页面归为file page。 do_read_fault() do_set_pte(vma, address, fault_page, pte, false, false) 如果该文件是可写入的,那么内核会将相应文件高速缓存页面的内容复制到新的页面中,并将新页面归为anon page。 do_cow_fault() do_set_pte(vma, address, new_page, pte, true, true)
作者回复: 很赞!你理解的很对,如果是读的话,那读出来的内存其实是跟file cache共享的,只有真正去写他的时候,才会真正分配给进程地址空间private的内存,这个细节我疏于描述了,你在这里能够指出来很赞!另外,看得出来你对内核代码研究的也很深入,加油!
2020-09-03320 - jssfy凡是私有的内存都会体现在 /proc/meminfo 中的 AnonPages 这一项: 私有的也有文件映射,感觉体现在anonpages里有点想不通
作者回复: 私有文件映射会把文件内容给读到进程地址空间,但是由于这个映射是私有的,也就是其他进程不可见,所以它的内容不会回写到文件,所以内核会把它的属性设置为anonpage。你可以写个测试用例来看看是不是这样。
2020-09-017 - ray老师您好, 请问我们平常看到的RSS(进程实际占用的物理内存)会包含shared memory吗? 谢谢老师的解答^^
作者回复: 会包含的。RSS是指进程地址空间已映射的物理内存,这个物理内存有可能是Shared方式来映射的,那这块物理内存就是Shared memory。也就是说RSS的本质是物理内存是否映射到了进程的地址空间,而和映射属性无关。
2020-09-055 - 伟伟老师好,想请问一下c的函数名后面带个小括号,里面有个数字,这个是什么意思呢,比方说malloc(3),其他内核的书里也经常看到
作者回复: 后面的数字代码该函数/命令所属的领域,比如: 1 - 用户命令 2 - 系统调用 3 - 库函数 等等 可以参考: https://www.kernel.org/doc/man-pages/
2021-08-2023 - 我能走多远mmap映射了1g的虚拟内存。在使用中,如果大页是2M大小。哪是不是物理内存不是连续的
作者回复: 嗯 只能保证2M是物理内存连续的 整个的1G是由很多2M连续物理内存组成。
2020-10-202 - Geek_b8749d邵老师,在代码中调用read接口读文件,文件的内容会进入pagecache吧,这部分内存包含在top中的VIRT中吗?可以让read接口读文件时文件内容不进入pagecache吗?2021-01-3011
- Bachue Zhou老师,请教下,00007ffd9d30f000 132 40 40 rw--- [ stack ] 像这种 stack 内存,一定不会是文件映射吧?那这种情况下,为什么 dirty pages 不是 0 呢?Dirty page 对于非文件映射的内存代表什么含义呢?2022-06-17
- 姑射仙人RES和RSS是怎样的关系?2021-11-082