如何判斷我的 Windows 伺服器是否正在交換?
我正在使用 Process Explorer 來監視我的 Windows 伺服器,同時它會重建一些數據。它主要是一個 CPU 密集型程序,但我想確保它沒有交換。如何判斷它是否正在使用 Process Explorer?我最初的猜測是在 System Information 視窗中,它是 Paging File Write Delta。是的?不?我是個白痴?
*截圖不是伺服器的……只是一個例子。
替代文字 http://www.malwareinfo.org/bootcamp/img/ProcessExplorer2.jpg
“Pages Input / sec 是要觀察的計數器,但您不必擔心它會“交換”,因為 Windows 不像 *nixes 那樣使用頁面文件。
首先你需要了解windows頁面是in not out的。我將引用Eric Lipperts 部落格文章的相關部分(稍作編輯),因為我自己不能說得更好:
“RAM 可以看作僅僅是一種性能優化。訪問 RAM 中的數據,其中資訊儲存在以接近光速傳播的電場中,比訪問磁碟上的數據要快得多,因為磁碟上的資訊儲存在巨大、沉重的黑色金屬分子
作業系統會跟踪最常訪問哪些程序的儲存頁面,並在 RAM 中製作它們的副本,以提高速度。當程序訪問與目前未記憶體在 RAM 中的頁面對應的指針時,作業系統會發生“頁面錯誤”,到磁碟中,並將頁面從磁碟複製到 RAM,做出合理的假設很快就會再次訪問它。
作業系統在共享只讀資源方面也非常聰明。如果兩個程序都從同一個 DLL 載入相同的程式碼頁,那麼作業系統可以在兩個程序之間共享 RAM 記憶體。由於程式碼可能不會被任何一個程序更改,因此通過共享來保存 RAM 的重複頁面是完全明智的。
但即使有巧妙的共享,這個記憶體系統最終還是會耗盡記憶體。發生這種情況時,作業系統會猜測哪些頁面最不可能很快再次被訪問,如果它們已經更改,則將它們寫入磁碟,並釋放 RAM 以讀取更有可能再次訪問的內容很快。
當作業系統猜測不正確,或者更有可能是沒有足夠的 RAM 來儲存所有正在執行的程序中的所有頻繁訪問的頁面時,機器就會開始“抖動”。作業系統將所有時間都花在寫入和讀取昂貴的磁碟儲存上,磁碟不斷執行,而您沒有完成任何工作。
這也意味著“記憶體不足”很少會導致“記憶體不足”錯誤。它不會導致錯誤,而是會導致性能下降,因為儲存實際上在磁碟上這一事實的全部成本突然變得相關。
另一種看待這個問題的方式是,您的程序消耗的虛擬記憶體總量與其性能實際上並沒有太大關係。相關的不是消耗的虛擬記憶體總量,而是(1)有多少記憶體不與其他程序共享,(2)常用頁面的“工作集”有多大,以及( 3)所有活動程序的工作集是否大於可用RAM。
現在應該清楚為什麼“記憶體不足”錯誤通常與您擁有多少物理記憶體或可用儲存量無關。它幾乎總是與地址空間有關,在 32 位 Windows 上,地址空間相對較小且容易碎片化。"
補充幾點:
- dll 和程序文件總是只分頁,永遠不會因為它們已經在磁碟上而被分頁(通常當物理記憶體變低時釋放的第一頁)
- 與任何其他記憶體問題相比,您更容易用完可用頁表條目或記憶體碎片嚴重(除了已經提到的整體性能不佳)
- 即使您在沒有頁面文件的情況下執行,您仍然會出現頁面錯誤
- 一般來說,查看送出的記憶體更能說明程序如何使用記憶體
有關 Windows 中記憶體管理如何工作的完整圖片,請參見
如果您認為自己有記憶體問題,我首先建議您觀看有關排除 Windows 記憶體問題的展示文稿
這是一個很好的解釋,為什麼有時你會因為記憶體碎片而不是“記憶體不足”:
有關虛擬記憶體、記憶體碎片和洩漏以及 WOW64 的更多資訊
更新:
Windows 10 對記憶體做了一些不同的事情,隨著時間的推移,你會看到一個名為“系統和壓縮記憶體”的程序,Windows 10 在分頁列表中添加了一個“壓縮儲存”。此 ram 是系統擁有的 USER 記憶體(通常系統只有核心記憶體)此記憶體被壓縮到位,平均減少到 30% 左右。這允許將更多頁面儲存在記憶體中(對於那些進行數學計算的人來說,這將增加 70% 的空間)請注意,如果記憶體仍然有壓力,則可以將壓縮儲存中的頁面(使用者模式系統程序空間)放在修改後的列表(壓縮),然後可以寫入物理頁面文件。系統將看到它們來自系統使用者模式空間並被壓縮,並且不會嘗試將它們放回儲存中。因此,在 Windows 10 系統上,它可能看起來系統正在吸入 ram,但實際上它只是試圖更有效地使用 ram。自 2013 年以來,Mac 使用者一直在使用類似的功能,並且較新版本的 Linux 核心採用了記憶體壓縮版本。這種節省記憶體的方法不僅更好,而且在其他作業系統中已經很常見。