我正在开发一个具有 512MB RAM 和足够交换内存来支持该应用程序的嵌入式系统。在内核中,我已将内核 cmd 参数的 RAM 大小限制为 130MB。并使用 swapoff -a
禁用交换。我还禁用了内核过度使用,以便应用程序可以单独在物理内存中运行。我验证了 /proc/cmdline
和 /proc/meminfo
的更改。现在,当我运行应用程序并检查最高值时,我的应用程序的 VSZ 是 177m,这比实际内存多!!这怎么可能?这段内存从何而来?
最佳答案
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 的虚拟内存。
像您所做的那样,禁用交换 (swapoff -a) 不会禁用虚拟内存。
在此处阅读有关虚拟内存的信息: Virtual memory
关于c - 为什么在 Linux 中内存使用量大于物理 RAM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26500960/