這裡討論 Windows 系統的分頁檔(page file)或 Linux 系統的交換空間(swap partition)是做什麼用的?應該設定為多大比較好?

傳統上作業系統的交換空間(swap partition)或是分頁檔(page file)都會設置為實體記憶體的兩倍,不過由於現在的記憶體價格便宜,一般新的電腦都有 8G 甚至 16G 以上的記憶體,這個時候您可能就不需要將交換空間或是分頁檔設定成那麼大,尤其是在使用固態硬碟的時候,設定過大的交換空間或是分頁檔反而會造成浪費,不過到底要設為多少比較適合還是要看個人的需求而定。

交換空間與分頁檔

首先我們稍微解釋一下交換空間與分頁檔的用途。一般的程式在執行時期,如果需要記憶體來儲存資料,都會預期作業系統會配置足夠的記憶體給它,當記憶體充足的狀況下,系統可以依照程式的要求來配置,一切都沒有問題,但是如果實體的記憶體不足時,系統無法配置新的記憶體空間給程式,通常就會造成程式整個當掉。

Windows 系統的分頁檔與 Linux 系統的交換空間的用途在於增加系統的記憶體空間,防止記憶體不足而造成系統當機,也就是把硬碟拿來當成記憶體使用的意思,當記憶體的空間不夠時,系統會自動把多出來的資料放進交換空間或是分頁檔中,這樣就可以讓程式正常執行。

由於硬碟的存取速度比記憶體慢非常多,因此為了提升系統的效能,系統通常都會將比較不常用的資料放進交換空間或是分頁檔中,盡可能減低硬碟的存取頻率與資料量,在早期比較舊的電腦上,記憶體常常會發生不足的狀況,這種時候您就會發現明明沒做什麼事情,硬碟的存取燈號就是一直在閃,這大概就是因為使用到交換空間或是分頁檔所導致的。

其他用途

除了擴充記憶體的空間之外,交換空間與分頁檔還有一些其他的用途,以 Windows 來說,如果系統發生當機時,系統可以將記憶體或是 kernel 的資料傾印(dump)至分頁檔中。

在 Linux 系統上,如果長時間沒有使用時,除了一般的休眠模式之外,也可以讓系統進入進入蟄伏(hibernation)的狀態,這種方式是將記憶體的資料都寫入硬碟中,然後關機,等到下次開機的時候,再從硬碟中將資料讀取回來,恢復成原有的狀態,這樣的模式適合用於比較長時間沒有使用的情況。

Linux 的蟄伏其實就是將資料從記憶體中寫進交換空間,也就是說交換空間的大小必須要能容納得下記憶體中的資料,否則就無法使用這樣的方式(如果您的記憶體有 16G,但是您只使用了其中的 4G,這樣的話就只需要 4G 的交換空間來儲存)。當然如果您沒打算使用蟄伏的功能,就不需要擔心這個問題。

交換空間與分頁檔該設多大?

到底交換空間與分頁檔該設為多大並沒有絕對的標準,主要是要看您的需求而定,假設您的記憶體有 8G,而您從來就不曾使用超過 4G 的記憶體,那麼縱使將交換空間或分頁檔關閉都無所謂。

但是如果您有 64G 的記憶體,但是您常常會需要處理 100G 的資料,那麼您最好將交換空間或是分頁檔設定為 64G 以上,以免造成記憶體不足的問題。

總而言之,實體記憶體的大小不是唯一的考量,還是要了解交換空間與分頁檔的用途之後,再自己決定該怎麼設定。

Windows 的分頁檔設定

Windows 系統中的分頁檔是儲存在 C:\pagefile.sys,系統預設會自動管理分頁檔的大小,系統會在需要額外空間時自動增加這個檔案的大小,一般的使用者通常都可以不需要操心這個問題。正常來說這個檔案應該都不會有過大的狀況,如果您發現您的分頁檔很大,那可能就是因為過去有需要大量記憶體的狀況發生,所以系統後來就會先預留大一點分頁檔。

如果想要自己調整分頁檔的大小,可以依照下面的步驟進行設定。

Step 1
從控制台的「系統及安全性」中選擇「系統」,點選左方的「進階系統設定」。

windows-page-file-1

Step 2
點選「進階」籤頁,點選效能的「設定」按鈕。

windows-page-file-2

Step 3
點選「進階」籤頁,在虛擬記憶體的地方就會顯示目前的分頁檔大小。

windows-page-file-3

以我的狀況來說,我的這台電腦有 8G 的實體記憶體,這裡系統目前所配置的分頁檔也大約是 8G。如果要更改的話,就點選「變更」按鈕。

Step 4
接著就可以針對分頁檔進行設定。

windows-page-file-4

如果您感覺您的實體記憶體很充足,不需要分頁檔,也可以直接把分頁檔關閉(不過通常不建議這麼做)。

關閉分頁檔事實上不會讓系統效能變好,因為系統只有在實體記憶體不足時,才會將資料放進分頁檔,由於現在的硬碟都很大,將分頁檔整個關閉換得的硬碟空間通常效益不高。

Linux 的交換空間

在 Linux 中所使用的交換空間跟 Windows 分頁檔的功能類似,不過由於交換空間是一個磁碟分割區,不像分頁檔是一個檔案,所以 Linux 系統上沒辦法動態調整交換空間的大小,通常在一開始安裝系統時就必須指定好交換空間的大小。

如果真的要變更 Linux 交換空間的大小,也是可以使用 GParted 這類的軟體來變更,只不過比較麻煩而已。

大部分的 Linux 發行版都有自己的安裝程式,而安裝程式通常都會有自己的規則來判斷預設的交換空間大小,像 Ubuntu 就會將交換空間的大小設定為比實體記憶體稍微大一些,以確保蟄伏的功能可以運作。

如果您要自行指定交換空間的大小,建議可以使用實體記憶體的大小再加上 0.5G 左右,這樣可以確保蟄伏的功能可以正常使用。如果您的實體記憶體很大(如 16G),而且您也不需要使用蟄伏的功能,那麼您就可以指定小一點的交換空間(如 2G)。

結論

總而言之,到底要將交換空間或分頁檔設定為多大,還是要看個人的需求而定,「記憶體的兩倍」這個規則大概只適用於以前比較老舊的硬體(1G 或 2G 的記憶體),以現在的硬體而言,沒有一個絕對的規則,如果您自己也不是很確定該怎麼設定,那麼就直接依照系統的預設值就可以了,通常系統所預設的狀況對於大多數人都會適用。

參考資料:HTG