介紹
在增加服務(wù)器的響應(yīng)速度并防止應(yīng)用程序出現(xiàn)內(nèi)存不足錯誤的最簡單方法之一是添加一些交換空間。在本指南中,我們將介紹如何向 Ubuntu 16.04 服務(wù)器添加交換文件。
什么是交換空間?
交換空間是硬盤上被指定為操作系統(tǒng)可以臨時存儲無法再放入 RAM 中的數(shù)據(jù)的區(qū)域?;旧?,這使您能夠增加服務(wù)器可以保存在其工作“內(nèi)存”中的信息量,但有一些注意事項。硬盤上的交換空間主要在 RAM 中不再有足夠空間來容納正在使用的應(yīng)用程序數(shù)據(jù)時使用。
寫入磁盤的信息速度將明顯慢于保存在 RAM 中的信息,但操作系統(tǒng)會更傾向于將運行的應(yīng)用程序數(shù)據(jù)保留在內(nèi)存中,并使用交換空間來存儲舊數(shù)據(jù)??偟膩碚f,當(dāng)系統(tǒng)的 RAM 耗盡時,擁有交換空間作為后備可以有效防止系統(tǒng)出現(xiàn)內(nèi)存不足異常,尤其是在具有非 SSD 存儲的系統(tǒng)上。
檢查系統(tǒng)的交換信息
在開始之前,我們可以檢查系統(tǒng)是否已經(jīng)有一些可用的交換空間。系統(tǒng)可以有多個交換文件或交換分區(qū),但通常一個就足夠了。
我們可以通過輸入以下命令來查看系統(tǒng)是否配置了任何交換空間:
sudo swapon --show
如果沒有返回任何輸出,這意味著您的系統(tǒng)當(dāng)前沒有可用的交換空間。
您可以使用 free
實用程序驗證是否沒有活動的交換:
free -h
total used free shared buff/cache available
Mem: 488M 36M 104M 652K 348M 426M
Swap: 0B 0B 0B
如您在輸出的“Swap”行中所見,系統(tǒng)上沒有活動的交換空間。
檢查硬盤分區(qū)上的可用空間
為交換分配空間的最常見方法是使用專門用于此任務(wù)的單獨分區(qū)。但是,改變分區(qū)方案并非總是可能的。我們同樣可以在現(xiàn)有分區(qū)上創(chuàng)建一個交換文件。
在執(zhí)行此操作之前,我們應(yīng)該通過輸入以下命令來檢查當(dāng)前磁盤使用情況:
df -h
Filesystem Size Used Avail Use% Mounted on
udev 238M 0 238M 0% /dev
tmpfs 49M 624K 49M 2% /run
/dev/vda1 20G 1.1G 18G 6% /
tmpfs 245M 0 245M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 245M 0 245M 0% /sys/fs/cgroup
tmpfs 49M 0 49M 0% /run/user/1001
在本例中,/dev
下的設(shè)備是我們的磁盤。在此示例中,我們有足夠的可用空間(僅使用了 1.1G)。您的使用情況可能會有所不同。
盡管有關(guān)交換空間適當(dāng)大小的意見很多,但實際上取決于個人偏好和應(yīng)用程序要求。通常,與系統(tǒng)上的 RAM 量相等或兩倍于 RAM 量的交換空間是一個很好的起點。另一個經(jīng)驗法則是,如果您只是將其用作 RAM 后備,那么超過 4G 的交換空間可能是不必要的。
創(chuàng)建交換文件
現(xiàn)在我們知道了可用的硬盤空間,我們可以開始在文件系統(tǒng)中創(chuàng)建一個交換文件。我們將在根目錄(/)中創(chuàng)建一個名為 swapfile
的交換大小文件。
使用 fallocate
程序創(chuàng)建交換文件是最佳方式。此命令可以立即創(chuàng)建一個預(yù)分配大小的文件。
由于我們示例中的服務(wù)器具有 512MB 的 RAM,我們將在本指南中創(chuàng)建一個 1GB 的文件。請根據(jù)您自己服務(wù)器的需求進行調(diào)整:
sudo fallocate -l 1G /swapfile
我們可以通過輸入以下命令來驗證已保留正確數(shù)量的空間:
ls -lh /swapfile
-rw-r--r-- 1 root root 1.0G Apr 25 11:14 /swapfile
我們已經(jīng)創(chuàng)建了具有正確空間大小的文件。
啟用交換文件
現(xiàn)在我們已經(jīng)有了正確大小的文件,我們需要將其轉(zhuǎn)換為交換空間。
首先,我們需要鎖定文件的權(quán)限,以便只有具有 root
權(quán)限的用戶才能讀取內(nèi)容。這可以防止普通用戶訪問文件,這將帶來重大的安全隱患。
通過輸入以下命令,將文件設(shè)置為只有 root
用戶可以訪問:
sudo chmod 600 /swapfile
通過輸入以下命令驗證權(quán)限更改:
ls -lh /swapfile
-rw------- 1 root root 1.0G Apr 25 11:14 /swapfile
如您所見,只有 root 用戶啟用了讀取和寫入權(quán)限。
現(xiàn)在,我們可以通過輸入以下命令將文件標(biāo)記為交換空間:
sudo mkswap /swapfile
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
通過輸入以下命令驗證交換是否可用:
sudo swapon --show
NAME TYPE SIZE USED PRIO
/swapfile file 1024M 0B -1
我們可以再次使用 free
實用程序的輸出來證實我們的發(fā)現(xiàn):
free -h
total used free shared buff/cache available
Mem: 488M 37M 96M 652K 354M 425M
Swap: 1.0G 0B 1.0G
我們成功設(shè)置了交換空間,操作系統(tǒng)將開始根據(jù)需要使用它。
使交換文件永久化
我們最近的更改已經(jīng)為當(dāng)前會話啟用了交換文件。但是,如果我們重新啟動,服務(wù)器將不會自動保留交換設(shè)置。我們可以通過將交換文件添加到我們的 /etc/fstab
文件來改變這一點。
在出現(xiàn)問題的情況下備份 /etc/fstab
文件:
sudo cp /etc/fstab /etc/fstab.bak
通過輸入以下命令將交換文件信息添加到 /etc/fstab
文件的末尾:
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
調(diào)整交換設(shè)置
有一些選項可以配置,這些選項將影響系統(tǒng)在處理交換時的性能。
調(diào)整 Swappiness 屬性
swappiness
參數(shù)配置系統(tǒng)將數(shù)據(jù)從 RAM 交換到交換空間的頻率。這是一個介于 0 和 100 之間的值,表示一個百分比。
當(dāng)值接近零時,內(nèi)核只有在絕對必要時才會將數(shù)據(jù)交換到磁盤。請記住,與 RAM 的交互“昂貴”,因為它所需的時間比與 RAM 的交互長得多,并且可能會顯著降低性能。告訴系統(tǒng)不要過多依賴交換通常會使系統(tǒng)更快。
接近 100 的值會嘗試將更多數(shù)據(jù)放入交換空間,以保持更多的 RAM 空間空閑。根據(jù)您的應(yīng)用程序內(nèi)存配置或服務(wù)器用途,這在某些情況下可能更好。
我們可以通過輸入以下命令查看當(dāng)前的 swappiness 值:
cat /proc/sys/vm/swappiness
60
對于桌面系統(tǒng),swappiness 設(shè)置為 60 是一個不錯的值。對于服務(wù)器,您可能希望將其調(diào)整到接近 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
在底部,您可以添加:
vm.swappiness=10
完成后保存并關(guān)閉文件。
調(diào)整緩存壓力設(shè)置
您可能還希望修改的另一個相關(guān)值是 vfs_cache_pressure
。此設(shè)置配置系統(tǒng)在其他數(shù)據(jù)之上選擇緩存 inode 和 dentry 信息的程度。
基本上,這是有關(guān)文件系統(tǒng)的訪問數(shù)據(jù)。這通常是非常昂貴的查找,并且非常頻繁地請求,因此對于系統(tǒng)來說緩存是一個很好的選擇。您可以再次查詢 proc
文件系統(tǒng)來查看當(dāng)前值:
cat /proc/sys/vm/vfs_cache_pressure
100
按照當(dāng)前配置,我們的系統(tǒng)會過快地從緩存中刪除 inode 信息。我們可以通過輸入以下命令將其設(shè)置為更保守的值,如 50:
sudo sysctl vm.vfs_cache_pressure=50
vm.vfs_cache_pressure = 50
同樣,這僅對當(dāng)前會話有效。我們可以通過將其添加到配置文件中來更改:
sudo nano /etc/sysctl.conf
在底部,添加指定新值的行:
vm.vfs_cache_pressure=50
完成后保存并關(guān)閉文件。
結(jié)論
按照本指南中的步驟進行操作,可以在本應(yīng)導(dǎo)致內(nèi)存不足異常的情況下為您提供一些緩沖空間。交換空間在避免一些常見問題方面非常有用。文章來源:http://www.zghlxwxcb.cn/news/detail-846441.html
如果您遇到內(nèi)存不足錯誤(OOM),或者發(fā)現(xiàn)系統(tǒng)無法使用您需要的應(yīng)用程序,最佳解決方案是優(yōu)化應(yīng)用程序配置或升級服務(wù)器。文章來源地址http://www.zghlxwxcb.cn/news/detail-846441.html
到了這里,關(guān)于在Ubuntu 16.04上如何添加交換空間的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!