处理声明使用大量内存,但“空闲”表示内存仍然空闲

我已经看到了与此相反的情况,但这令人费解。

总之,我有一个过程,%MEM声称在使用'ps'和'top'时使用74%的内存。 但是,“免费”显示我只使用了32%的可用内存。

这是'top'的输出:

top - 18:25:49 up 203 days, 14 min, 1 user, load average: 3.48, 3.75, 3.79 Tasks: 349 total, 1 running, 347 sleeping, 1 stopped, 0 zombie Cpu(s): 10.3%us, 4.7%sy, 0.0%ni, 75.1%id, 6.5%wa, 0.0%hi, 3.4%si,0.0%st Mem: 189.054G total, 188.280G used, 793.473M free, 253.570M buffers Swap: 4095.996M total, 967.234M used, 3128.762M free, 126.370G cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 14416 root 20 0 165g 139g 81g S 250.3 74.0 764266:39 asd 30660 root 20 0 15164 1328 836 R 2.0 0.0 0:00.01 top 

你会注意到'asd'过程声称使用了74%(139g)的可用RAM。 如果查看所使用的总内存(caching内存(188-126)),则看起来整个系统仅使用62G。 这显然比一个'asd'声称使用的要低得多。

“免费”同样令人困惑。 它显示61G免费:

 # free -g total used free shared buffers cached Mem: 189 188 0 81 0 126 -/+ buffers/cache: 61 127 Swap: 3 0 3 

'ps'似乎与“top”中的进程列表一致:

 # ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 14416 261 74.0 173381464 146791980 ? Ssl Jan25 764310:00 /usr/bin/asd 

我明白为什么“自由”会声称可用内存less于“最高”,但我不明白某个进程如何声称使用比整个系统报告更多的“已用”内存。

更新:我不认为这是你指向我提姆的post相同。 那些似乎引用相反的问题,人们要么读错了“免费”的输出,并没有考虑caching和缓冲区。 因此,他们找不到使用他们认为“自由”声称使用的内存的进程。 在我的情况下,我有一个声称使用大量内存的过程,但“免费”似乎认为内存仍然可用。

我觉得有一个简单的解释, freeps之间的区别。 如果您检查top输出,您将看到126.370G cached内存,该内存free显示为可用内存。 它如何计数。 你的内存总量为189.054G ,你的进程使用了139G驻留内存,所以你应该有50G内存的缓冲区等。如果你检查你的进程共享内存,你会看到它有81G共享内存,可以算在你的居民记忆。 所以,如果你的进程使用文件,它们可能位于缓冲区中,并与你的进程共享(它只是假设,我不知道共享内存如何与文件计数)。 所以这只是拥有这么多空闲空间的原因之一。