c - 为什么在 Linux 中内存使用量大于物理 RAM?

标签 c linux memory memory-management linux-kernel

我正在开发一个具有 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/

相关文章:

c - 我需要有关 SDL 2 的帮助

c - 为什么玩家在改变方向时有时会向错误的方向移动

c++ - 类析构函数和指针释放

java - 如何可靠地给 Java 更多内存?

memory - 32 与 64 位...或者, 'processing information' 到底是什么意思

c++ - 获取 cv::Mat 的值

java - 在java中从c读取长字节

linux - 从任何地方执行 shell 文件

C++ Primer 第 9 章无法编译 : `useConvs.cc:50:19: error: call of overloaded ‘stod(std::string&)’ is ambiguous`

linux - 有没有办法在不关闭窗口的情况下退出无模式vi?