查看进程的内存占用情况

例如要查看linuxqq的内存占用情况

/proc/[pid]/smap

这个文件反应了运行时的进程的在内存中的完整分布。这是一张完整的清单。通过它可以看到对应进程所关联的所有的内存信息(包含共享的,和私有的)

  1. 查看linuxqq进程id

    查看命令:ps -ef | grep qq
    file

  2. 查看内存占用情况并输出:

    查看命令:sudo awk -F : '/.*kB$/ {sum[$1]+=$2} END{for(i in sum){print i"="sum[i]" kB"}}' /proc/4460/smaps
    file


字段说明:

字段 说明
Locked 常驻物理内存的大小,这些页不会被换出。
Private_Dirty 未改写的私有页面页面
Shared_Clean 和其他进程共享的未改写页面
MMUPageSize MMU页大小,大多数情况下,和KernelPageSize大小一样。
Swap 存在于交换分区的数据大小(如果物理内存有限,可能存在一部分在主存一部分在交换分区)
Rss 是实际分配的内存,这部分物理内存已经分配,不需要缺页中断就可以使用的。 计算公式:Rss=Shared_Clean+Shared_Dirty+Private_Clean+Private_Dirty
Private_Hugetlb 由hugetlbfs页面支持的内存使用量,由于历史原因,该页面未计入“ RSS”或“ PSS”字段中。 并且这些没有包含在Shared/Private_Clean/Dirty 字段中。
AnonHugePages
Shared_Hugetlb
Shared_Dirty 和其他进程共享的已改写页面
Pss 是平摊计算后的实际物理使用内存(有些内存会和其他进程共享,例如mmap进来的)。 实际上包含下面private_clean+private_dirty,和按比例均分的shared_clean、shared_dirty。
ShmemPmdMapped PMD页面已经被映射的共享(shmem / tmpfs)内存量。
FilePmdMapped
KernelPageSize 内核一页的大小
Referenced 当前页面被标记为已引用或者包含匿名映射
Private_Clean 未改写的私有页面页面
SwapPss 计算逻辑就跟pss一样,只不过针对的是交换分区的内存。
LazyFree
Anonymous 匿名映射的物理内存,这部分内存不来自于文件的内存大小。
Size 虚拟内存空间大小。但是这个内存值不一定是物理内存实际分配的大小,因为在用户态上,虚拟内存总是延迟分配的。这个值计算也非常简单,就是该VMA的开始位置减结束位置。延迟分配就是当进程申请内存的时候,Linux会给他先分配页,但是并不会区建立页与页框的映射关系,意思就是说并不会分配物理内存,而当真正使用的时候,就会产生一个缺页异常,硬件跳转page fault处理程序执行,在其中分配物理内存,然后修改页表(创建页表项)。异常处理完毕,返回程序用户态,继续执行。

参考:https://www.jianshu.com/p/8203457a11cc

发表回复 0

Your email address will not be published.