基本介紹
概念,問題,分析,解決,
概念
虛擬記憶體別稱虛擬存儲器(Virtual Memory)。電腦中所運行的程式均需經由記憶體執行,若執行的程式占用記憶體很大或很多,則會導致記憶體消耗殆盡。為解決該問題,Windows中運用了虛擬記憶體技術,即勻出一部分硬碟空間來充當記憶體使用。當記憶體耗盡時,電腦就會自動調用硬碟來充當記憶體,以緩解記憶體的緊張。若計算機運行程式或操作所需的隨機存儲器(RAM)不足時,則 Windows 會用虛擬存儲器進行補償。它將計算機的RAM和硬碟上的臨時空間組合。當RAM運行速率緩慢時,它便將數據從RAM移動到稱為“分頁檔案”的空間中。將數據移入分頁檔案可釋放RAM,以便完成工作。 一般而言,計算機的RAM容量越大,程式運行得越快。若計算機的速率由於RAM可用空間匱乏而減緩,則可嘗試通過增加虛擬記憶體來進行補償。但是,計算機從RAM讀取數據的速率要比從硬碟讀取數據的速率快,因而擴增RAM容量(可加記憶體條)是最佳選擇。
虛擬記憶體是Windows 為作為記憶體使用的一部分硬碟空間。即便物理記憶體很大,虛擬記憶體也是必不可少的。虛擬記憶體在硬碟上其實就是一個碩大無比的檔案,檔案名稱是PAGEFILE.SYS,通常狀態下是看不到的。必須關閉資源管理器對系統檔案的保護功能才能看到這個檔案。虛擬記憶體有時候也被稱為是“頁面檔案”就是從這個檔案的檔案名稱中來的。
記憶體在計算機中的作用很大,電腦中所有運行的程式都需要經過記憶體來執行,如果執行的程式很大或很多,就會導致記憶體消耗殆盡。為了解決這個問題,WINDOWS運用了虛擬記憶體技術,即拿出一部分硬碟空間來充當記憶體使用,這部分空間即稱為虛擬記憶體,虛擬記憶體在硬碟上的存在形式就是 PAGEFILE.SYS這個頁面檔案。
通過windows系統的任務管理器的“性能”模組中可以看到“PF使用率”,一般情況下,虛擬記憶體是由系統託管的,也就是說系統會根據實際情況自動調整虛擬記憶體的大小,PF使用率就是計算機當前已經使用了的空間大小。程式打開的越多,程式占用的記憶體越大,而物理記憶體越小,這個PF使用率就會越高。說到底就是物理記憶體不夠用。
問題
PF是虛擬記憶體,既然是虛擬記憶體,肯定速度比不上物理記憶體。當它使用率過高時會占用大量磁碟空間,默認頁面檔案是在C糟,也就是說,PF使用率過高會讓C糟變得更臃腫。而且計算機速度會變慢,甚至有時電腦會提示虛擬記憶體不足。
1.物理記憶體
計算機的快速發展,也就是計算機硬體和軟體的快速發展。當前(2013年)主流的計算機都擁有4GB以上的物理記憶體,與之相對的是更加龐大的軟體,例如Windows XP只占用500MB左右的物理空間,而Windows 7則占用了2GB以上甚至更大的空間,這些龐大的檔案在運行時讓記憶體吃緊,如果記憶體過小,PF使用率就會變高。
2.軟體使用
軟體運行時需要占用記憶體,軟體越大,占用的記憶體就越多,但是物理記憶體是有限的,所以運行的軟體越多,PF使用率就會越高。同時一些電腦用戶沒有檢查計算機的後台軟體及服務,那么這些後台程式一樣會占用記憶體,計算機會將這些後台程式移至虛擬記憶體。
3.系統設定
系統設定不夠合理。1)如果系統啟動時同時載入了大量的啟動項,這些項目會轉移到後台運行,占用記憶體;2)系統的外觀設定,系統特效使用的越多,記憶體占用越大;3)頁面檔案所在的硬碟容量即將使用完(也可能是頁面檔案所在的分區容量即將使用完),虛擬記憶體設定太小,系統就會提示虛擬記憶體不足。說到底,PF使用率和物理記憶體大小成反比關係,可用的物理記憶體越大,PF使用率就會越低。
分析
在保護模式下,Win32 程式可以定址 2GB 或 3GB 虛擬記憶體,對每一個進程來說,它定址的範圍都是這么多。OS 負責把進程提交的虛擬記憶體按頁(一頁 4KB,工作集)映射到物理記憶體的實際頁幀上(駐留集)。如果設定了硬碟上的交換檔案(Pagefile.sys),那么 OS 也會在物理記憶體和交換檔案之間交換記憶體頁,不活動的進程,它的虛擬記憶體頁會被從物理記憶體中交換到硬碟上,等它活動的時候再交換回來(分頁)。所以,如果設定了硬碟上的交換檔案,而物理記憶體不足(映射所有的虛擬記憶體頁)的時候,電腦就會頻繁將物理記憶體里的頁和硬碟進行交換。如果沒有設定硬碟上的交換檔案,物理記憶體不足(映射所有的虛擬記憶體頁)的時候電腦就會告訴你“虛擬記憶體不足了”。
如果設定了硬碟上的交換檔案,Windows 總是會將不太活動的進程的記憶體頁交換到那裡去。對於一個進程來說,它在物理記憶體中映射的駐留集少於它想要的工作集,就會引發分頁而降低效率。對於物理記憶體相當大的電腦,除非需要執行會檢查硬碟上的交換檔案的程式,否則可以取消硬碟上的交換檔案。比如早期的 PhotoShop,那個時候的電腦,記憶體比較小,所以會強制要求啟用硬碟上的交換檔案。新版本的 PhotoShop 沒有這個強制檢查,你可以分配幾十 GB 物理記憶體給它用(x64 的版本)。
虛擬記憶體的使用總量是所有工作集的綜合,因此它包括了分頁到硬碟的部分,如果有的話。值得注意的是,共享的 DLL 只使用自己一部分工作集,雖然幾個進程使用了它,但由於 Windows 允許進程間共享頁幀,所以用任務管理器查看記憶體使用的時候,要注意這個方面的區別。而且,任務管理器查看記憶體使用顯示的是已經提交的虛擬記憶體,如果進程沒有提交,是不會告訴你的。
如果系統變慢(尤其經常同時長時間運行較多程式時),可以查看任務管理中的PF使用率值,如果幾乎占用到100%,可以將虛擬記憶體調大到記憶體的2到3倍或更多,這個時候再看PF占用率會下降很多。修改完畢後,多個程式之間切換速度變得不再緩慢。
解決
增加更大的物理記憶體是解決PF使用率過高的根本方法(單獨升記憶體會使機器的命中率降低 即PF降 CPU升)
如果沒有增加物理記憶體,在物理記憶體不變的情況下,我們該如何解決PF使用率過高的問題呢?