顶部内存摘要和进程 RES 总和不相加

顶部内存摘要和进程 RES 总和不相加

我很难理解 . 报告的内存使用情况top。内存摘要部分列出了以下内容。中的所有数字MiB

MiB Mem :  31884.1 total,  13562.7 free,   7881.9 used,  10439.4 buff/cache
MiB Swap:   2048.0 total,   2048.0 free,      0.0 used.  22665.9 avail Mem

但是,当我对列值求和时RES,它们的总和并没有达到used摘要中报告的值。的总和RES15225.7.这是used的双重值7881.9。如果我加上usedbuff/cache,我就得到了18321.3。所以,现在used和的总和buff/cache大于 的总和RES

更多发现:

  • 注意到top内存摘要几乎与free.以下是free -m输出。
               total        used        free      shared  buff/cache   available
Mem:           31884        7881       13555         886       10446       22658
Swap:           2047           0        2047

正如您所看到的,usedfreebuff/cache、 以及available都具有几乎相同的值。

  • 当我从free输出中添加字段usedshared和时buff/cache,我得到了19213。这又不仅仅是RES求和!然而,这是预期的,因为我们一致认为free和的输出top从摘要的角度来看是匹配的。

  • 我期望RES总和(来自top)将等于/接近usedsharedbuff/cache(来自free)的总和,因为top文档列出了私有和共享部分中每个进程的内存因素。

象限图解内存类型

      RES  - anything occupying physical memory which, beginning with
            Linux-4.5, is the sum of the following three fields:
            RSan - quadrant 1 pages, which include any
                   former quadrant 3 pages if modified
            RSfd - quadrant 3 and quadrant 4 pages
            RSsh - quadrant 2 pages
  • 每当我清除系统缓存时,RES总和总是大于预期总和。这就是我清除系统缓存的方法:sudo sync && sudo sysctl -w vm.drop_caches=1。有趣的是,RES总和上升到18175.2!以下是top清除缓存后的内存摘要。正如预期的那样,您可以注意到 显着下降buff/cache。然而,我没想到used领域会显着增加!输出中usedshared、 和的总和为。这比总和少了大约 5 GiB!buff/cachefree13533RES
MiB Mem :  31884.1 total,  19358.2 free,   8795.6 used,   3730.2 buff/cache
MiB Swap:   2048.0 total,   2048.0 free,      0.0 used.  21626.5 avail Mem
  • 尝试过,这些值与、或 的总和smem都不匹配!topfreeRES

我无法理解这些数字!而且我不知道,作为一个软件应用程序,我编写的应用程序实际上需要多少内存,并且如果我遇到内存问题,将无法调查内存问题!我完全迷失在这里了。如果有人可以阐明正在发生的事情,我们将不胜感激!

我查看了其他问题,但实际上没有解决该问题。喜欢:为什么“top”中的内存使用量没有累加?这个幸运的是他们的号码检查得很好。 ..等等,但仍然没有找到明确的答案!

也看了这个:为什么 top 命令中的总 RES 与已用内存不匹配?[重复]这个也没有(正确确定Linux中的内存使用情况) 回答问题。

相关内容