我正在使用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. Linux內存映射文件保留大量物理內存
- 4. Android內存管理與Linux內存管理有什麼區別?
- 5. 「容器超出物理內存限制」
- 6. 什麼是內存回收在linux中
- 7. 評估可用物理內存量
- 8. 物理內存佔用率過高
- 9. Linux內存管理(緩存)
- 10. 虛擬內存到物理內存
- 11. 物理內存與虛擬內存
- 12. 虛擬內存或物理內存
- 13. 爲什麼超出內存限制?
- 14. Linux內存管理
- 15. 爲什麼在Windows Vista上調用GlobalMemoryStatus中的可用物理內存(dwAvailPhys)>可用虛擬內存(dwAvailVirtual)x64
- 16. 爲什麼MKMapKit佔用大量內存
- 17. 什麼時候紋理內存應該優於常量內存?
- 18. 計算物理內存地址的過程是什麼?
- 19. Nodejs進程能否使用比可用物理內存更多的內存(通過使用交換內存)?
- 20. 在Linux中記錄內存佔用量
- 21. 什麼消耗Linux中的內存
- 22. 什麼是高iOS內存使用量?
- 23. 內存交錯和內存在Linux內核中發生了什麼?
- 24. 如何找出linux下的空閒物理內存量(c)
- 25. Linux物理內存分析使用hexeditor進行取證
- 26. Linux如何知道進程使用了多少物理內存?
- 27. 內存在Linux中
- 28. 內存映射顯示比物理內存更多的內存
- 29. HttpContext.Cache物理內存使用率
- 30. 最大物理內存使用進程
內存映射文件?相同的內存在虛擬地址空間中映射兩次?檢查進程內存映射。 – 2014-10-22 05:47:06
http://linuxatemyram.com/和'/ proc/$ PID/maps' – 2014-10-22 06:44:24