为什么内存使用量超过Linux中的物理RAM?

时间:2014-10-22 05:40:46

标签: c linux memory memory-management linux-kernel

我正在开发一个具有512MB RAM和足够交换内存的嵌入式系统来支持该应用程序。从内核中,我将内核cmd参数的RAM大小限制为130MB。并使用swapoff -a禁用了交换。我还禁用了内核过度使用,因此应用程序可以单独在物理内存中运行。我验证了/proc/cmdline/proc/meminfo的更改。现在,当我运行应用程序并检查顶部值时,我的应用程序的VSZ是177m,这超过了实际的内存!这怎么可能?这段记忆是从哪里来的?

1 个答案:

答案 0 :(得分:6)

VSZ是进程使用的虚拟内存大小。这是正常的,它高于你的物理内存的大小,因为这是其中一个主要的想法。您应该查看驻留大小(RSS),它是该进程使用的实际物理内存。

看看这个例子:

我正在运行nginx进程:

 ps -o rss,vsz,cmd ax | grep -i nginx | head -n1
  956  31248 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf

rss - 956 kB
vsz - 31248 kB

因此,这意味着此过程使用956kB的物理内存和31MB的虚拟内存。

与您一样,禁用swap(swapoff -a)不会禁用虚拟内存。

在这里阅读虚拟内存: Virtual memory