https://www.digitalocean.com/...
如何在Ubuntu 18.04上添加交換空間
Brian Boucheron
本教程的先前版本由Justin Ellingwood編寫
介紹
防范應(yīng)用程序內(nèi)存不足錯誤的最簡單方法之一是為服務(wù)器添加一些交換空間。在本指南中,我們將介紹如何將交換文件添加到 Ubuntu 18.04服務(wù)器。
警告 :雖然通常建議對使用傳統(tǒng)旋轉(zhuǎn)硬盤驅(qū)動器的系統(tǒng)進(jìn)行交換,但使用SSD交換可能會導(dǎo)致硬件隨著時間的推移而出現(xiàn)問題。出于這種考慮,我們不建議在任何使用SSD存儲的上啟用交換。這樣做會影響您的底層硬件的可靠性。本指南是為可能在其他地方使用旋轉(zhuǎn)磁盤系統(tǒng)的用戶提供的參考。
什么是交換?
交換是硬盤驅(qū)動器上的一個區(qū)域,它被指定為操作系統(tǒng)可以臨時存儲無法再保存在RAM中的數(shù)據(jù)的位置。基本上,這使您能夠增加服務(wù)器在其工作“內(nèi)存”中保留的信息量,但有一些注意事項。硬盤驅(qū)動器上的交換空間將主要用于RAM中不再有足夠空間來保存正在使用的應(yīng)用程序數(shù)據(jù)。
寫入磁盤的信息將比RAM中保存的信息慢得多,但操作系統(tǒng)更愿意在內(nèi)存中運行應(yīng)用程序數(shù)據(jù),并使用交換舊數(shù)據(jù)。總的來說,將交換空間作為系統(tǒng)RAM耗盡時的后備空間,可以很好地防范具有非SSD存儲的系統(tǒng)上的內(nèi)存不足異常。
步驟1 - 檢查系統(tǒng)的交換信息
在開始之前,我們可以檢查系統(tǒng)是否已經(jīng)有一些可用的交換空間。可以有多個交換文件或交換分區(qū),但通常一個就足夠了。
我們可以通過鍵入以下內(nèi)容來查看系統(tǒng)是否已配置任
sudo swapon --show
如果您沒有收到任何輸出,這意味著您的系統(tǒng)當(dāng)前沒有可用的交換空間。
您可以使用該free實用程序驗證沒有活動交換:
free -h
輸出
total used free shared buff/cache available
Mem: 985M 84M 222M 680K 678M 721M
Swap: 0B 0B 0B
正如您在輸出的Swap行中看到的那樣,系統(tǒng)上沒有活動交換。
第2步 - 檢查硬盤驅(qū)動器分區(qū)上的可用空間
在我們創(chuàng)建交換文件之前,我們將檢查當(dāng)前的磁盤使用情況,以確保我們有足夠的空間。通過輸入:
df -h
輸出
Filesystem Size Used Avail Use% Mounted on
udev 481M 0 481M 0% /dev
tmpfs 99M 656K 98M 1% /run
/dev/vda1 25G 1.4G 23G 6% /
tmpfs 493M 0 493M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 493M 0 493M 0% /sys/fs/cgroup
/dev/vda15 105M 3.4M 102M 4% /boot/efi
tmpfs 99M 0 99M 0% /run/user/1000
在這種情況下/,Mounted on列中的設(shè)備是我們的磁盤。在這個例子中我們有足夠的空間(僅使用1.4G)。您的使用可能會有所不同。
雖然對于交換空間的適當(dāng)大小有很多意見,但這實際上取決于您的個人偏好和您的應(yīng)用程序要求。通常,等于或加倍系統(tǒng)RAM的量是一個很好的起點。另一個好的經(jīng)驗法則是,如果您只是將其用作RAM后備,那么任何超過4G的交換都可能是不必要的。
第3步 - 創(chuàng)建交換文件
現(xiàn)在我們知道了可用的硬盤空間,我們可以在文件系統(tǒng)上創(chuàng)建一個交換文件。我們將swapfile在根(/)目錄中分配我們想要調(diào)用的交換大小的文件。
創(chuàng)建交換文件的最佳方法是使用該fallocate程序。此命令立即創(chuàng)建指定大小的文件。
由于我們示例中的服務(wù)器具有1G的RAM,因此我們將在本指南中創(chuàng)建1G文件。調(diào)整此項以滿足您自己的服務(wù)器的需求:
sudo fallocate -l 1G /swapfile
我們可以通過輸入以下內(nèi)容來驗證是否保留了正確的空間量:
ls -lh /swapfile
-rw-r--r-- 1 root root 1.0G Apr 25 11:14 /swapfile
我們的文件創(chuàng)建時留出了正確的空間。
第4步 - 啟用交換文件
現(xiàn)在我們有一個正確大小的文件,我們需要實際將其轉(zhuǎn)換為交換空間。
首先,我們需要鎖定文件的權(quán)限,以便只有具有root權(quán)限的用戶才能讀取內(nèi)容。這可以防止普通用戶訪問該文件,這會產(chǎn)生嚴(yán)重的安全隱患。
通過鍵入以下內(nèi)容使該文件只能由root訪問:
sudo chmod 600 /swapfile
鍵入以下命令驗證權(quán)限更改:
ls -lh /swapfile
輸出
-rw------- 1 root root 1.0G Apr 25 11:14 /swapfile
如您所見,只有root用戶啟用了讀寫標(biāo)志。
我們現(xiàn)在可以通過輸入以下內(nèi)容將文件標(biāo)記為交換空間
sudo mkswap /swapfile
輸出t
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=6e965805-2ab9-450f-aed6-577e74089dbf
標(biāo)記文件后,我們可以啟用交換文件,允許我們的系統(tǒng)開始使用它:
sudo swapon /swapfile
輸入以下內(nèi)容驗證交換是否可用:
sudo swapon --show
輸出
NAME TYPE SIZE USED PRIO
/swapfile file 1024M 0B -2
我們可以free再次檢查該實用程序的輸出以證實我們的發(fā)現(xiàn):
free -h
輸出
total used free shared buff/cache available
Mem: 985M 84M 220M 680K 680M 722M
Swap: 1.0G 0B 1.0G
我們的交換已成功設(shè)置,我們的操作系統(tǒng)將在必要時開始使用它。
第5步 - 使交換文件永久化
我們最近的更改已啟用當(dāng)前會話的交換文件。但是,如果我們重新啟動,服務(wù)器將不會自動保留交換設(shè)置。我們可以通過將交換文件添加到我們的/etc/fstab文件來更改此設(shè)置。
/etc/fstab如果出現(xiàn)任何問題,請備份該文件:
sudo cp /etc/fstab /etc/fstab.bak
/etc/fstab鍵入以下內(nèi)容,將交換文件信息添加到文件末尾:
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
接下來,我們將回顧一些我們可以更新的設(shè)置以調(diào)整我們的交換空間。
第6步 - 調(diào)整交換設(shè)置
您可以配置一些選項,這些選項會在處理交換時對系統(tǒng)的性能產(chǎn)生影響。
調(diào)整Swappiness屬性
該 swappiness 參數(shù)配置系統(tǒng)將數(shù)據(jù)從 RAM 交換到交換空間的頻率。這是介于0和100之間的值,表示百分比。
值接近于零時,除非絕對必要,否則內(nèi)核不會將數(shù)據(jù)交換到磁盤。請記住,與交換文件的交互是“昂貴的”,因為它們比與RAM的交互花費更長的時間,并且它們可能導(dǎo)致性能的顯著降低。告訴系統(tǒng)不要太依賴交換,通常會使您的系統(tǒng)更快。
接近100的值將嘗試將更多數(shù)據(jù)放入交換中以努力保持更多RAM空間。根據(jù)應(yīng)用程序的內(nèi)存配置文件或服務(wù)器的使用情況,在某些情況下可能會更好。
我們可以通過輸入以下內(nèi)容來查看當(dāng)前的 swappiness 值:
cat /proc/sys/vm/swappiness
輸出
對于桌面,swappiness設(shè)置為60并不是一個糟糕的值。對于服務(wù)器,您可能希望將其移近0。
我們可以使用該sysctl命令將swappiness設(shè)置為不同的值。
例如,要將swappiness設(shè)置為10,我們可以鍵入:
sudo sysctl vm.swappiness=10
輸出
vm.swappiness = 10
此設(shè)置將持續(xù)到下次重新啟動。我們可以通過在/etc/sysctl.conf文件中添加以下行來自動設(shè)置此值:
sudo nano /etc/sysctl.conf
在 /etc/sysctl.conf 底部,您可以添加:
vm.swappiness=10
完成后保存并關(guān)閉文件。
調(diào)整緩存壓力設(shè)置
您可能想要修改的另一個相關(guān)值是 vfs_cache_pressure。此設(shè)置配置系統(tǒng)將選擇多少緩存 inode 和 dentry信息而不是其他數(shù)據(jù)。
基本上,這是關(guān)于文件系統(tǒng)的訪問數(shù)據(jù)。這通常是非常昂貴的查詢和非常頻繁的請求,所以這是您的系統(tǒng)緩存的一個很好的事情。您可以通過 proc 再次查詢文件系統(tǒng)來查看當(dāng)前值:
cat /proc/sys/vm/vfs_cache_pressure
輸出
由于它當(dāng)前已配置,我們的系統(tǒng)會過快地從緩存中刪除 inode 信息。我們可以通過輸入以下內(nèi)容將其設(shè)置為更保守的設(shè)置(如50):
sudo sysctl vm.vfs_cache_pressure=50
輸出
vm.vfs_cache_pressure = 50
同樣,這僅適用于我們當(dāng)前的會話。我們可以通過將其添加到配置文件來改變它,就像我們使用swappiness設(shè)置一樣:
sudo nano /etc/sysctl.conf
在/etc/sysctl.conf底部,添加指定新值的行:
vm.vfs_cache_pressure=50
完成后保存并關(guān)閉文件。
結(jié)論
按照本指南中的步驟將為您提供一些 swap 空間,否則會導(dǎo)致內(nèi)存不足異常。交換空間在避免一些常見問題方面非常有用。
如果遇到OOM(內(nèi)存不足)錯誤,或者如果發(fā)現(xiàn)系統(tǒng)無法使用所需的應(yīng)用程序,最佳解決方案是優(yōu)化應(yīng)用程序配置或升級服務(wù)器。
總結(jié)
以上所述是小編給大家介紹的在Ubuntu 18.04上添加交換空間的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對武林網(wǎng)網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!
新聞熱點
疑難解答
圖片精選