我正在使用512MB RAM和足够的交换内存来支持应用程序的嵌入式系统。在内核中,我将内核cmd参数的RAM大小限制为130MB。并使用swapoff -a
禁用交换。我还禁用了内核过度使用,以便应用程序可以单独运行在物理内存中。我验证了/proc/cmdline
和/proc/meminfo
的更改。现在,当我运行应用程序并检查最高值时,我的应用程序的VSZ是177m,比实际内存更多!这怎么可能?这个记忆从哪里来的?为什么在Linux中内存使用量超过物理内存?
回答
VSZ是进程使用的虚拟内存大小。这是正常的,它高于你的物理记忆的大小,因为这是这个主要想法之一。你应该看看Resident size(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
是否可以对虚拟内存设置限制?我只是好奇...... – Griffin 2014-10-23 09:06:21
我不认为你解释了为什么'swapoff -a'不会导致VMM的使用。 * swap *仅用于*读写*存储器或程序数据。对于程序代码,Linux *虚拟文件系统*可以定位(重新加载)页面。如果代码跳转到一个地址,那么代码*故障*并且数据从磁盘加载。这样,当一个程序启动时,整个事物不会加载到内存中;只有*开始*地址页面。同样在内存压力下,很少使用的代码可能会碰撞。 – 2014-11-04 19:27:11
- 1. 为linux内核配置物理内存
- 2. Linux内存映射文件保留大量物理内存
- 3. “容器超出物理内存限制”
- 4. 什么是内存回收在linux中
- 5. 评估可用物理内存量
- 6. 物理内存占用率过高
- 7. 虚拟内存到物理内存
- 8. Linux内存管理
- 9. 为什么超出内存限制?
- 10. 为什么在Windows Vista上调用GlobalMemoryStatus中的可用物理内存(dwAvailPhys)>可用虚拟内存(dwAvailVirtual)x64
- 11. 为什么MKMapKit占用大量内存
- 12. 计算物理内存地址的过程是什么?
- 13. Nodejs进程能否使用比可用物理内存更多的内存(通过使用交换内存)?
- 14. 在Linux中记录内存占用量
- 15. 什么消耗Linux中的内存
- 16. Linux如何知道进程使用了多少物理内存?
- 17. 什么不能确定计算机内物理地址内存量?
- 18. 为什么Python内存错误带`append()`大量内存剩余
- 19. 如何确定linux中的可用物理内存
- 20. 如何在linux中打印出物理内存的大小
- 21. 如何减少SQL Server中的物理内存使用量
- 22. 为什么Python 3.5使用这么多内存?远远超过Python 3.4
- 23. 为什么手动内存管理?
- 24. 为什么System.Drawing.Graphics.GetHdc()增加内存使用
- 25. Memcached使用超过最大内存
- 26. 为什么内存映射区域在Linux中增长下降
- 27. Linux内存使用率高时Linux进程释放内存?
- 28. 找出一个进程在linux中使用多少额外的物理内存
- 29. Linux内存使用情况
- 30. Windows内存中的Eclipse内存usuage Linux
内存映射文件?相同的内存在虚拟地址空间中映射两次?检查进程内存映射。 – 2014-10-22 05:47:06
http://linuxatemyram.com/和'/ proc/$ PID/maps' – 2014-10-22 06:44:24