我正在使用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