查看进程的内存占用情况
例如要查看linuxqq的内存占用情况
/proc/[pid]/smap
这个文件反应了运行时的进程的在内存中的完整分布。这是一张完整的清单。通过它可以看到对应进程所关联的所有的内存信息(包含共享的,和私有的)
-
查看linuxqq进程id
查看命令:
ps -ef | grep qq

-
查看内存占用情况并输出:
查看命令:
sudo awk -F : '/.*kB$/ {sum[$1]+=$2} END{for(i in sum){print i"="sum[i]" kB"}}' /proc/4460/smaps

字段说明:
| 字段 | 说明 |
|---|---|
| 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处理程序执行,在其中分配物理内存,然后修改页表(创建页表项)。异常处理完毕,返回程序用户态,继续执行。 |