禁用Mac的dynamic_pager?

禁用Mac的dynamic_pager?

我讀過這篇關於 Mac OS X 記憶體管理的部落格文章:http://workstuff.tumblr.com/post/20464780085/something-is-deeply-broken-in-os-x-memory-management

我想聽聽您對此事的看法。

我“只有”4GB 內存,因此存在內核恐慌的可能性。

我確實有一個旋轉磁碟(而不是 SSD),並且偶爾會看到沙灘球,有時甚至會在繼續之前旋轉我的外部硬碟。

活動監視器螢幕

它說目前沒有使用交換,這是否意味著禁用dynamic_pager不會有任何作用?它確實有一些頁面。

嘗試有多安全?我也許可以編寫一個腳本,在記憶體不足時重新啟用尋呼機?

[更新]:一天結束時,26MB 交換,更多的頁面進出,以及大量的不活動記憶體。

答案1

OS X 有三個問題:

  1. 預設情況下,寫入磁碟或從磁碟讀取的任何資料都會以比最近的程式資料更高的優先權緩存在 RAM 中。應用程式可以使用 選項在每個描述符的基礎上停用此功能F_NOCACHEfcntl()但很少有人這麼做。因此,大量的磁碟活動會導致當時未使用的記憶體被換出。這會在原始磁碟活動之上創建更多磁碟活動,用於交換和稍後讀回該記憶體。

  2. HFS+ 不能很好地處理並發檔案存取。特別是,同時開啟和關閉許多不同的檔案會產生巨大的爭用,並且一次幾乎只能發生一個開啟/關閉操作。

  3. 許多 OS X 應用程式將磁碟存取分散到許多小檔案中。

因此,當兩個或多個應用程式嘗試同時存取大量檔案時,由於交換活動與應用程式競爭 I/O,磁碟 I/O 負載呈指數級增加。

停用動態分頁器可能會消除將私人/髒應用程式頁面推送到磁碟的功能,從而阻止該指數曲線的早期部分。相反,系統可能會從公共/乾淨的映射檔案(可執行檔、庫等)以及可能一開始就不應該快取的快取檔案資料中清除頁面。這是否真正提高了效能在很大程度上取決於您正在使用的應用程式。例如,Safari 在管理其磁碟 I/O 方面非常糟糕,所以我想這會有所幫助。

如果所需的 RAM 量實際上超過了可用量,就會出現問題:恐慌崩潰是結束一天的一種非常突然的方式。但是,如果您不編輯大文件或以其他方式執行本質上內存密集型的操作,那麼這種情況可能很少見,值得考慮冒險。

順便說一句,您可以使用該lsof命令查看哪些進程打開了哪些文件,以及使用該fs_usage命令查看文件操作的運行日誌。當以 root 身份或通過 運行時,兩者都能更好地工作sudo

相關內容