为什么我已提交的内存没有全部被使用/显示在任务管理器上?

为什么我已提交的内存没有全部被使用/显示在任务管理器上?

由于某种原因,它说我已经分配了 13.2GB 的内存,但在内存区域上它只显示 3.4GB。

坚定的:

坚定的

真实记忆:

真实的记忆。

答案1

对我来说,这在 Linux 上是完全正常的行为,这称为内存过量使用。但是,如果您担心系统的健康状况,或者您觉得性能不佳,您可以使用以下命令检查哪些进程消耗了最多的虚拟内存:

ps aux | head -1; ps aux | sort -rnk 5

过一段时间再执行此命令并比较结果。您可能会发现在此期间有几个进程消耗了大量内存。

然后你可以使用以下方法检查这些进程的内存布局地图效用或/进程目录:

➜  ~ sudo cat /proc/2095/maps
c000000000-c000600000 rw-p 00000000 00:00 0 
c000600000-c001200000 rw-p 00000000 00:00 0 
c001200000-c004000000 rw-p 00000000 00:00 0 
55ee50165000-55ee51972000 r--p 00000000 fd:01 11799696                   /usr/bin/dockerd
55ee51972000-55ee535be000 r-xp 0180d000 fd:01 11799696                   /usr/bin/dockerd
55ee535be000-55ee5392f000 r--p 03459000 fd:01 11799696                   /usr/bin/dockerd
55ee53930000-55ee54f5d000 r--p 037ca000 fd:01 11799696                   /usr/bin/dockerd
55ee54f5d000-55ee54ffd000 rw-p 04df7000 fd:01 11799696                   /usr/bin/dockerd
55ee54ffd000-55ee55045000 rw-p 00000000 00:00 0 
55ee568ad000-55ee568ce000 rw-p 00000000 00:00 0                          [heap]

保存目标进程的内存布局,然后过一段时间再检查并比较结果。如果某个堆或堆栈的起始/结束地址,或其他内存区域发生显著变化,您可能会找到您正在寻找的内存。

PS 我确实通过这种方式在我的 C++ APP 中发现了泄漏:我没有正确释放用于解析的 JSON 库的资源,因此其中一个内存区域不断增长。

相关内容