我只是看了一下top的输出,它向我展示了以下(以及其他过程):

如一次所见,我有10个进程,每个进程消耗大约10 so,因此总共消耗100 so。然而,计算机只有64 be的内存,从顶部的第二行可以看到。其中,目前大约使用22 Of。
现在解决这个难题的方法是: test_mpi.out进程在彼此之间使用大量的共享内存。因为我有源代码,所以我知道实际的内存消耗大约是10 is。
计算机空闲时消耗约12 up内存,因此这相当于报告的22 up内存。
我不明白的是,top如何知道实际使用的内存只有22‘t。根据显示的所有列(VIRT、RES和SHR),top不应该能够计算出这一点。如果有人能把这件事弄清楚,那就太棒了。
编辑:在redhat linux上运行
编辑:多亏了迈克尔·荷马,我现在知道top从/proc/meminfo获取了这些信息。但我很希望得到一个答案,解释如何确定所有test_mpi.out进程总共只消耗10 of (而不是天真地添加top输出所建议的100 of )。我试着查看/proc/PID/status,但没有找到任何线索,说明如何确定共享一个大内存段的几个进程的实际内存使用情况(如果我没有源代码的话)。
发布于 2016-01-12 01:39:30
您可以看到,SHR列显示了与RES相同的内存量--这意味着该特定任务的驻留内存实际上100%由共享内存段组成。但是,即使这样也不能给您提供充分的洞察力,因为RES只是没有分页的内存量。
要了解进程的实际内存消耗是什么,请尝试使用一种更智能的方法,如带有select字段的ps(1) (查看-o选项和手册中的STANDARD FORMAT SPECIFIERS部分)。
请注意,除了size字段(这是一个非常粗略的估计),从内存的角度来评估进程的总大小是很困难的,因为它的某些内存可能会与其他进程共享,而且我们无法立即判断其中有多少页是脏的(参见手册页中关于SIZE和RSS的NOTES部分的段落)。
要能够判断这些进程实际上使用的是相同的共享内存段,您需要查看ipcs(1)命令的输出,并查看具有可疑数量的nattch进程的共享内存段。
然后,您需要使用ipcs -m -i <id>查看这些段的详细信息,这些信息将显示附加的实际进程。
如果这听起来太复杂,请将其视为挑战摘录--编写一个给定进程ID的脚本,打印该进程附加的SHM ID列表,以及与其共享那些SHM ID的PID列表。;)
https://unix.stackexchange.com/questions/254752
复制相似问题