Linux 内存管理三
本节主要涉及下面这些概念,搞清楚我们在linux下面写一个应用程序究竟耗费了多少内存,也是我们查内核泄漏的指标。 VSS- Virtual Set Size RSS- Resident Set Size PSS- Proportional Set Size USS- Unique Set Size 在linux 里面大量的存在内存共享的概念,比如我们的libc 库,加入我们有100个程序调用了c 库,linux会把代码段再内存里面共享给这个100个进程使用(动态连接库都是这样),我们把一个程序跑两次,程序的代码段也是共享的,当然数据段是写时拷贝的,当我们再评估一个进程耗费多少内存的时候,我们有必要搞清这些虚的,实的,以及共享的,我们说的进程的内存消耗就是指用户空间耗费的内存,内核空间耗费的内存就是内核消耗的,比如我们做了一个系统调用,这个系统调用申请了很多内存,这个写内存也不属于进程消耗 VMA 表面地址的合法性,和权限,不代表页表里面真实的权限,但是linux的页表中发生page fault时会检测vma,确定是否合法访问,如果合法,申请对应的物理地址映射过来。 这些vma 可能来自程序本身的代码段,数据段,或者动态库。 我们一般用如下方法来查看vma Linux 下各种page fault,通常分为minor page fault ,和major page fault