為您的伺服器添加交換空間是彌補記憶體不足錯誤的絕佳選擇。Linux 允許使用者在系統的 RAM 已滿時,在系統中添加交換空間。當您建立一個專用的空間分割區時,您將能讓實體記憶體順暢運行,而無需過多擔心磁碟空間不足的問題。
交換空間概述
Linux 中的交換空間是機器 虛擬記憶體 的一部分,在實體記憶體空間耗盡時使用。特別是在運行大型程式或應用程式而需要額外記憶體時,交換空間是暫存非作用中記憶體分頁的理想選擇。建立交換空間允許使用者在運行大型程式時儲存資料,從而減少應用程式崩潰。這意味著如果系統需要更多記憶體資源且 RAM 已滿,記憶體中所有非作用中的分頁都會被轉移到交換空間,使程式能夠不中斷地運行。
我需要多少交換空間?
交換空間的大小取決於多個因素。其中包括可用的 RAM、承受的負載,以及系統是否需要支援休眠功能(暫停至磁碟)。請參閱下表,根據 RAM 中的可用空間來檢查建議的交換空間:
|
序號 |
可用 RAM 空間 |
建議交換空間 |
|
1. |
1GB |
1GB |
|
2. |
2GB |
1GB |
|
3. |
3GB |
2GB |
|
4. |
4GB |
2GB |
|
5. |
5GB |
2GB |
|
6. |
6GB |
2GB |
|
7. |
8GB |
3GB |
在本教學中,我們將 引導您完成在 Ubuntu 20.04 上添加交換空間的步驟。讓我們開始吧!
先決條件
要繼續進行本教學,您需要:
- 已安裝 Ubuntu 於您的系統中。
- 非 root 使用者 帳號設定,並在您的機器中具有 sudo 權限。
步驟 1:檢查交換空間資訊
交換空間的大小取決於系統的 RAM。因此,在建立交換空間之前,必須先檢查系統中是否有可用的交換空間。輸入以下指令以檢查系統是否已設定任何交換空間:
|
1 |
$ sudo swapon --show |
如果有顯示輸出,表示您的系統中有空間可以建立交換空間。然而,如果沒有輸出,則表示沒有足夠的可用空間來添加交換空間。
使用 free 工具來驗證沒有啟用的交換空間:
|
1 |
$ free -h |
您將會看到輸出中有一行空值的交換空間列:
步驟 2:檢查硬碟分割區可用空間
與檢查系統可用性類似,現在讓我們檢查目前的磁碟使用情況,以確保我們有足夠的空間。使用 df 指令來檢查硬碟分割區的可用空間:
|
1 |
df -h |
在 / 於 Mounted on 欄位中的裝置是我們的磁碟,它是 11% 空閒的。您將會看到輸出:
在檢查系統需求之後,讓我們繼續並在我們的檔案系統上建立一個交換檔案。
步驟 3:建立交換檔案
要在我們的檔案系統上建立交換檔案,請使用 swapfile 於根 (/) 目錄中,並使用 fallocate 程式。分配檔案大小取決於您的需求。為了保持本教學簡單且易於理解,我們將建立一個 1G 檔案並分配 1G 的 RAM。使用 sudo 指令來建立交換檔案:
|
1 |
sudo fallocate -l 1G /swapfile |
接下來,輸入此指令以驗證保留的空間:
|
1 |
$ ls -lh /swapfile |
現在我們已經在系統中建立了交換空間,讓我們在下一步中啟用它。
步驟 4:啟用交換檔案
一旦我們有了合適的大小,就讓我們將其轉換為交換空間。出於安全原因,至關重要的是讓我們的檔案僅能由 root 使用者存取,並防止一般使用者存取。我們將添加限制,以便具有 root 權限的使用者可以檢視該檔案並讀取其內容。使用以下 root 指令使該檔案僅能由 root 使用者存取:
|
1 |
sudo chmod 600 /swapfile |
然後,使用 ls 指令來驗證變更:
|
1 |
$ ls -lh /swapfile |
如您所見,只有 root 使用者啟用了讀取和寫入標記:
之後,將該檔案標記為交換空間:
|
1 |
sudo mkswap /swapfile |
您將會看到輸出:
之後,啟用 swap 檔案並允許我們的系統開始使用它:
|
1 |
sudo swapon /swapfile |
接下來,驗證 swap 是否可用:
|
1 |
$ sudo swapon --show |
您將會看到以下輸出:
正如我們在 步驟 1 中所做的,我們將再次檢查 free 工具的空間:
|
1 |
free -h |
您將會看到以下輸出:
我們的 swap 已成功設置,操作系統將在需要時開始使用它。在下一步中,我們將使 swap 檔案永久生效。
步驟 5:使 Swap 檔案永久生效
預設情況下,每當我們重新啟動時,伺服器不會自動保留 swap 設定。為了更改預設設定並確保安全,我們將把 swap 檔案添加到我們的 /etc/fstab 檔案中。使用 sudo 指令來備份 /etc/fstab 檔案:
|
1 |
sudo cp /etc/fstab /etc/fstab.bak |
接下來,將 swap 檔案資訊添加到您的 /etc/fstab 檔案末尾,輸入:
|
1 |
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab |
之後,讓我們檢視一些設定並進行修改,以便調整我們的 swap 空間。
步驟 6:修改 Swap 設定
在此步驟中,我們將配置設定並進行一些修改。讓我們調整 swappiness 屬性並更改快取壓力。
-
調整 Swappiness 屬性
這個 swappiness 參數是一個可調節的核心參數。它改變了交換出執行階段記憶體之間的平衡,並負責將數據從 RAM 交換到 swap 空間。此參數值以百分比表示,範圍從 0 到 100。
這個 vm.swappiness 值對系統 swappiness 的行為有直接影響。 vm.swappiness 越高,系統進行交換的次數就越多,反之亦然。如果該值接近於零,核心將不會交換數據,這可能會導致效能下降。允許您的系統不依賴 swap 是提高其效能並獲得強大響應能力的好方法。
或者, vm.swappiness 越接近 100,系統就會嘗試將更多數據放入 swap 中,而減少在實體記憶體中的數據。與低到中等的 vm.swappiness 值不同,當有大量數據在 RAM 中頻繁換入換出時,高系統交換會產生非常不良的影響。
輸入以下指令檢查目前的 swappiness 值:
|
1 |
cat /proc/sys/vm/swappiness |
您將會看到以下輸出:
您也可以使用 sysctl 指令來設定您選擇的 swappiness。輸入以下指令將 swappiness 值設定為 15:
|
1 |
sudo sysctl vm.swappiness = 15 |
您將會看到以下輸出:
在系統重新啟動之前,設定將保持不變。將該行添加到我們的 /etc/sysctl.conf 檔案中,以便在重新啟動時自動設定該值:
|
1 |
sudo nano /etc/sysctl.conf |
您可以在底部添加以下程式碼:
|
1 |
Vm.swappiness = 15 |
然後,儲存並關閉檔案。
-
調整快取壓力
接下來,我們將修改 vfs_cache_pressure,這將處理 inode 和 dentry 資訊(相對於其他數據)。這些 vfs_cache_pressure 設定 還控制了核心回收用於快取目錄的記憶體的傾向。再次瀏覽 proc 檔案系統以檢查目前的值:
|
1 |
cat /proc/sys/vm/vfs_cache_pressure |
您將會看到以下輸出:
由於配置已經完成,我們的系統將從快取中清除 inode 資訊。讓我們將 sysctl vm.vfs_cache_pressure 設定為更穩定的設定,如下所示:
|
1 |
sudo sysctl vm.vfs_cache_pressure = 60 |
您將會看到以下輸出:
與我們在 swappiness 設定中所做的類似,我們也可以在這裡更改配置:
|
1 |
sudo nano /etc/sysctl.conf |
在底部插入一行,指出您建立的新值:
|
1 |
Vm.vfs_cache_pressure = 60 |
最後,儲存並關閉檔案。
結論
您可以將交換空間新增為專用的交換分割區、交換檔案,或是兩者的組合。您可以建立交換空間並利用其優勢來流暢地執行應用程式,而無需過度擔心記憶體不足的警告。雖然在記憶體空間有限的系統中建立交換空間是一項額外的優勢,但絕不能將其視為增加更多 RAM 空間的替代方案。請記住,交換空間位於硬碟上,因此與實體記憶體相比,您可能會遇到稍微緩慢的存取時間。
以下是更多關於 我們部落格 的教學課程,將協助您開始使用您的 Ubuntu 伺服器:
祝您運算愉快!










留言
目前尚無留言。成為第一個留言的人吧。