提高服務器性能和避免內存不足的推薦方法之一是創建交換空間或交換文件。 交換 是位於硬盤上的虛擬內存,在內存利用率高時擴展 RAM。
當您的系統主存耗盡時,Linux 內核會從 RAM 中交換一部分內存並將其寫入硬盤。 這樣,系統可以使用更多 RAM,進程可以順利運行。
在本教程中,我們將學習如何在 Linux 發行版(例如 Ubuntu 和 CentOS)上創建交換文件。
檢查交換配置
了解了創建交換文件的優點後,首先確認您的系統上是否配置了交換非常重要。 這將幫助您了解是否配置交換文件。
要檢查是否創建了交換空間,請運行以下命令:
$ swapon
該命令將顯示交換分區的大小和文件系統標籤。 這是命令的一些輸出。
NAME TYPE SIZE USED PRIO
/dev/sda9 partition 3.8G 383.3M -2
如果您運行該命令並且沒有得到任何輸出,那麼這意味著您沒有配置交換分區。 您可以通過運行以下命令來確認沒有交換空間:
$ free -h
這將顯示主內存和交換利用率的統計信息。
total used free shared buff/cache available
Mem: 7.6G 5.6G 386M 1.1G 1.7G 675M
Swap: 0B 0B 0G
從輸出中,我們可以清楚地看到,在 ‘swap’ 行中,沒有打印內存。 這是對 Linux 系統上沒有活動交換分區的確認。 現在讓我們為系統創建一個交換文件。
檢查硬盤空間
如前所述,交換空間是駐留在硬盤上的虛擬內存,它為 RAM 提供了擴展。 考慮到這一點,我們將在硬盤上創建一個交換文件。 但在我們這樣做之前,檢查可用硬盤空間總是謹慎的。
要檢查 Linux 上的可用硬盤空間,請運行以下命令:
$ df -h
在輸出中,注意由單個正斜杠 ( / ) 在下面 ‘鑲嵌在‘ 柱子。 在下面的輸出中,根分區被標記為 /dev/sda7 文件系統,並且有 97G 的可用空間,這已經足夠了。
Filesystem Size Used Avail Use% Mounted on
udev 3.9G 0 3.9G 0% /dev
tmpfs 784M 2.3M 781M 1% /run
/dev/sda7 156G 54G 97G 39% /
tmpfs 3.9G 828M 3.1G 22% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/sda10 29G 5.9G 21G 22% /var
/dev/sda8 1.9G 124M 1.7G 7% /boot
創建交換文件
確定我們的 Linux 系統上有足夠的空間後,我們將繼續創建交換文件。 請記住,交換空間通常是在安裝期間創建的。 如果交換空間已經存在,那麼您就可以開始了。 但是,如果您沒有交換空間,建議創建一個交換文件。
考慮到這一點,我們將創建一個 1 GB 的交換文件。 為了實現這一點,發出 錯誤定位 命令如圖:
$ sudo fallocate -l 1G /swap_file
隨意給交換文件任何你喜歡的名字。 在這種情況下,我們將其命名為 交換文件。 但是,如果 fallocate 實用程序不存在,請執行以下命令:
$ sudo dd if=/dev/zero of=/swap_file bs=1024 count=1048576
接下來,為交換文件設置正確的文件權限,因為只有 root 被允許讀寫權限:
$ sudo chmod 600 /swap_file
這 chmod 600 參數僅將讀寫權限分配給交換文件。
設置交換區
要設置交換區,請使用以下命令 交換 實用程序如圖:
$ sudo mkswap / swap_file
要激活交換文件,請運行以下命令:
$ sudo swapon /swap_file
使交換在重啟時持久化
在 Linux 系統上創建的交換文件不是永久性的,並且不會在重新啟動後繼續存在。 為了使交換文件即使在重新啟動時也保持不變,我們需要編輯 /etc/fstab 文件並附加新創建的交換條目。
使用您喜歡的文本編輯器,打開 /etc/fstab 文件。 我們使用了 vim 編輯器,如下所示:
$ sudo vim /etc/fstab
接下來粘貼以下內容
/swap_file swap swap defaults 0 0
Save 更改並退出 /etc/fstab 文件。 要確認已創建交換文件,請運行以下命令:
$ sudo swapon --show
你應該得到類似於我們所擁有的輸出
NAME TYPE SIZE USED PRIO
/swap_file file 1024M 346.4M -2
交換設置
至此,我們已經成功創建了我們的交換文件。 我們將考慮交換的另一個屬性,那就是交換價值。 Swappiness 是指 Linux 內核中決定交換使用頻率的屬性。
swappiness 值的範圍從 0 到 100。低值意味著系統將導致內核盡可能地停止交換。 較高的值會產生相反的效果 – 它使內核盡可能頻繁地使用交換。
默認情況下,swappiness 值為 60。您可以通過運行以下命令來確認:
cat /proc/sys/vm/swappiness
雖然這個值看起來不錯,但它不是生產服務器的首選。 要設置較低的值,例如 20,請運行以下命令。
sudo sysctl vm.swappiness=20
要使該值在重新啟動時保持不變,請將以下行添加到 /etc/sysctl.conf 文件中
vm.swappiness=20
交換文件與交換分區
Linux 自帶兩種交換空間,交換分區和交換文件。 交換分區是硬盤驅動器的一個獨特部分,純粹用於交換。 此處不存在任何文件。
另一方面,交換文件是一個獨特的文件,它與您的數據和系統文件一起位於文件系統上。
真的需要交換空間嗎? 多少?
安裝 Linux 時最常見的問題是“我需要創建交換嗎?”。 正如我們之前所討論的,當 RAM 由於某種原因耗盡時,交換空間旨在充當緩衝區。 當沒有更多內存來容納應用程序時,操作系統會選擇某個進程來殺死。 這將開始影響系統的性能。
好吧,您可能永遠不會完全用完所有 RAM。 但是,為了安全起見,值得擁有一點交換空間。 將交換空間視為遊艇中的安全船。 萬一遊艇著火,您可以用它航行到安全的地方。
所以這裡有一個大問題,我需要創建多少交換空間? 坦率地說,這個問題沒有直接的答案,只有建議。 紅帽的建議,建議創建佔 Linux 系統上安裝的物理 RAM 的 20% 的交換空間。 但是,這可能會因 RAM 和操作系統的大小而異。
為了 example,CentOS 建議如下:
- 如果 RAM 小於 2GB,則交換空間應該是 RAM 大小的兩倍。
- 如果內存超過2GB,那麼 交換空間 = 2 + RAM 大小. 為了 example, 如果 RAM 為 4 GB,則交換空間應為 6 GB。
對於 Ubuntu,這略有不同
- 如果 RAM 小於 1GB,則交換空間應等於或兩倍於 RAM 大小。
- 否則,如果 RAM 大於 1GB,則交換空間應等於 RAM 的平方根。
在 休眠模式,交換空間是必不可少的,因為它通過將位於 RAM 上的內容傳輸到交換分區來保留 RAM 的狀態。 因此,建議您將交換大小設置為等於 RAM 的大小。 所以,如果你有 8G 的 RAM,一個 8G 的交換文件就足夠了。
結論
我們不能再強調在您的系統上有交換空間的必要性。 當主內存耗盡時,它會派上用場,幫助您處理繁重的應用程序,例如視頻編輯軟件。 無論您的 Linux 系統上的 RAM 容量有多大,始終建議為任何不可預見的事件配置交換。
我們希望您現在可以輕鬆地在 Linux 系統上創建和啟用交換文件。 您對本指南的反饋將不勝感激。