Mac-Osx

有沒有辦法讓 OSX 使用更多的 RAM 和更少的交換?

  • February 13, 2018

我遇到的問題是在伺服器(以及其他 OSX 機器)上,我們有 4GB 的 RAM,但我們發現 OSX 只使用了 40-60% 的可用 RAM,同時還有 6-7GB 的交換空間。伺服器執行 Apache 和 MySQL,而其他機器是台式機。

我一直在將它的使用情況與類似的 Linux 機器(硬體和軟體)進行比較,發現 Linux 通常使用 80-90% 的 RAM,並且交換文件要小得多(2-3GB)。Linux 伺服器通常也執行得更快。

有沒有辦法強制 OSX 在使用磁碟交換文件之前使用更多或大部分 RAM?

在 Windows 中,您實際上可以完全禁用交換。OSX有類似的東西嗎?

最基本的答案?不會。作業系統會為使用者處理記憶體管理——根據程序的要求為程序提供所需的記憶體,並且在修改系統執行方式方面並沒有提供很多內容。試圖弄清楚記憶體使用率是否是 Linux 伺服器性能優於 Mac 伺服器的等式的一部分並沒有多大幫助。

由於虛擬記憶體系統缺乏“可破解性”,您最好的選擇是評估虛擬記憶體的性能,看看它是否真的是您遇到性能問題的原因 - 最基本的是使用vm_stat或使用跟隨它通過使用vm_stat [number of seconds]來查看發生了多少頁面輸出。將未使用的頁面從 RAM 移動到硬碟驅動器的成本比將頁面從硬碟驅動器恢復到 RAM 的成本低得多。OS X 術語中的一個頁面是指 4kb 的數據。

此外,32 位程序(例如 Illustrator)不能訪問超過 4GB 的空間,因此理論上可能有 2GB 可用空間,並且如果您安裝了 6GB,則程序記憶體不足。

在您的桌面和伺服器上,我都會執行vm_stat 2並檢查最後一列 - 特別是當您在切換到 Illustrator 時遇到多秒延遲時。

要了解交換的實際大小,您可以在 Activity Monitor 中檢查交換大小或執行du -shc /var/vm/swap* | tail -n 1.

使用du -sh /var/vm有一個警告:在具有休眠模式(過去 4 年或更新的任何設備)的筆記型電腦上,可能與sleepimage您安裝的記憶體量大致相同。


Mac OS X 記憶體行話:

有線:這是指核心程式碼等。永遠不應該從 RAM 中移出的記憶體。也稱為常駐記憶體。

Shared:在兩個或多個程序之間共享的記憶體。兩個程序都會顯示這個記憶體量,因此對於實際使用的記憶體量可能會有點誤導。

Real:這是 task_info() 報告的應用程序的“真實”記憶體使用情況 - 目前程序擁有的物理頁數的粗略計數。(尺寸)

Private:這是程序單獨使用的記憶體,用於駐留記憶體。(RPRVT)

虛擬:程序中映射到任何東西的地址空間總量——無論是用於變數的任意大空間還是任何東西——它並不等同於實際的 VM 使用。(尺寸)

活動:目前標記為活動的記憶體並已使用 RAM。

非活動:“不再使用非活動記憶體並已記憶體到磁碟。它將保留在 RAM 中,直到另一個應用程序需要空間。如果您(或您的電腦的客戶端)回來,將此資訊留在 RAM 中對您有利以後再說。” - Mac OS X 幫助

Free:在沒有任何數據的情況下實際可用的 RAM 量。


我所知道的最好的文件(並且能夠在後續研究中找到)是 Apple 在其開發人員網站上自己的管理記憶體文章。

其他有價值的來源:Darwin-dev 郵件列表:[ 1 ]、[ 2 ] 和一篇關於MacOSXHints的舊文章。此外,Mike Ash 在他的部落格上發布了一個很好的外行介紹


有可能(我沒有嘗試過)通過執行sudo launchctl unload /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist然後重新啟動來禁用虛擬記憶體系統,以便 dynamic_pager(實際執行虛擬記憶體分配的程序)不會啟動。但是,由於作業系統假定它具有虛擬記憶體,您可能會發現自己很快就會遇到問題。載入它備份執行sudo launchctl load /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist(如果需要從單使用者模式)

引用自:https://serverfault.com/questions/7585