linux 环境下,一个进程到底占用了多少内存?要回答这个问题,就要知道内核提供了哪些接口来供用户查看进程的各种具体运行时特征。
/proc//smaps shows memory consumption for each of the process's mappings
/proc//maps containing the currently mapped memory regions and their access permissions
/proc/[pid]/statm provides information about memory usage, measured in pages
- top命令通过解析/proc/
/statm统计VIRT和RES和SHR字段值。 - VIRT是申请的虚拟内存总量。
- RES是进程使用的物理内存总和。
- /proc/
/smaps内Shared_*统计的是RES中映射数量>=2的物理内存。 - /proc/
/smaps内Private_*统计的是RES中映射数量=1的物理内存。 - SHR是RES中“映射至文件”的物理内存总和。包括:
程序的代码段。动态库的代码段。通过mmap做的文件映射。通过mmap做的匿名映射,但指明了MAP_SHARED属性。通过shmget申请的共享内存。