CentOS 7 上添加 Swap


如何在 CentOS 7 上添加 Swap

1. 介紹

提高服務器響應速度和防止應用程序內存不足錯誤的最簡單方法之一是添加一些交換空間。 Swap 是硬盤上的一個區域,它被指定為操作系統可以臨時存儲數據的地方,這些數據不能再保存在 RAM 中。

寫入磁盤的信息將比保存在 RAM 中的信息慢,但操作系統更願意將應用程序數據保存在內存中,並使用 Swap 交換舊數據。總的來說,當系統的 RAM 耗盡時,將 Swap 作為數據存儲空間是一個很好的選擇。

在本指南中,我們將介紹如何在 CentOS 7 服務器上創建和啟用交換文件。

2. 檢查系統的交換信息

在我們開始之前,我們將看看我們的操作系統,看看我們是否已經有一些可用的交換空間。我們可以有多個交換文件或交換分區,但通常一個就足夠了。

我們可以通過鍵入以下命令來查看系統是否有任何配置交換:

sudo swapon -s
Bash

如果返回空,表示目前沒有啟用任何 Swap。

另一個檢查 Swap 的方法是使用 free 命令,它顯示了系統內存使用的情況:

free -m
Bash
              total        used        free shared buff/cache available Mem: 472 111 36 4 324 308 Swap: 0 0 0
Bash

3. 檢查硬盤驅動器分區上的可用空間

為 swap 分配空間的典型方式是使用專門用於該任務的單獨分區。但是,改變分區方案並不總是可能的。我們可以輕松地創建駐留在現有分區上的交換文件。

在我們這樣做之前,我們應該知道我們當前的磁盤使用情況。我們可以通過輸入以下內容來獲得這些信息:

df -h
Bash
文件系統             容量  已用  可用 已用% 掛載點
/dev/mapper/cl-root   17G  5.0G   13G   30% /
devtmpfs             226M     0  226M    0% /dev
tmpfs                237M     0  237M    0% /dev/shm
tmpfs                237M  4.6M  232M    2% /run
tmpfs                237M     0  237M    0% /sys/fs/cgroup
/dev/sda1           1014M  139M  876M   14% /boot
tmpfs                 48M     0   48M    0% /run/user/0
Bash

正如第一行中看到的,我們的硬盤分區有 13G 可用,所以我們有大量空間可用。這是在一個新的,中等規模的 VPS 實例上,所以你的實際使用可能會有很大的不同。

盡管對於交換空間的適當大小有很多意見,但這取決於你的個人偏好和應用程序要求。一般來說,等於或者是系統內存量的兩倍是一個很好的起點。

由於我的老古董機器只具有 512M 的 RAM,並且加倍會占用我不太願意被占用的大量磁盤空間,所以我將創建 1GB 的交換空間以匹配我系統的 RAM。

4. 創建一個交換文件

現在我們知道了可用的存儲空間,我們可以在我們的文件系統中創建一個交換文件。我們將 swapfile 在我們的 root( / )目錄中創建一個文件,盡管如果你願意,可以將文件命名為其他文件。該文件必須分配我們想要的交換文件的空間量。

傳統上,我們將通過使用該 dd 命令來創建具有預分配空間的文件。這個多功能的磁盤工具從一個位置寫入另一個位置。

我們可以使用它在 Linux 系統中的特殊設備上將文件零寫入文件,該系統 /dev/zero 只需要根據請求分配盡可能多的零。

我們使用 bs 塊大小和 count 塊數的組合來指定文件大小。我們分配給每個參數幾乎完全是任意的。重要的是它們相乘的結果。

例如,在我們的例子中,我們正在創建一個 1G 的文件。我們可以通過指定 1M 的塊大小和 1024:

也可以指定 1G 的塊大小和 1,但是如果在系統本身內存小於 1G 的情況下會由於 輸入緩沖導致內存耗盡 而失敗 塊大小越大速度越快

dd if=/dev/zero of=/swapfile bs=1M count=1024
Bash
記錄了1024+0 的讀入
記錄了1024+0 的寫出
1073741824字節(1.1 GB)已復制,4.76434 秒,225 MB/秒
Bash

在按 ENTER 之前檢查你的命令,因為如果你指出 of(代表輸出文件)到錯誤的位置,這可能會破壞數據。

我們可以看到 1 千兆字節已經分配:

ls -lh /swapfile
Bash
-rw-r--r--. 1 root root 1.0G 2月  22 16:36 /swapfile
Bash

5. 啟用交換文件

目前,我們的文件已創建,但我們的系統不知道這應該用於交換。我們需要告訴我們的系統將該文件格式化為交換,然后啟用它。

在我們這樣做之前,我們需要調整我們文件的權限,以便除 root 之外的任何人都無法讀取它。允許其他用戶讀取或寫入此文件將是一個巨大的安全風險。我們可以通過輸入以下內容來鎖定權限:

chmod 600 /swapfile
Bash

通過輸入以下內容驗證文件是否具有正確的權限:

ls -lh /swapfile
Bash
-rw-------. 1 root root 1.0G 2月  22 16:36 /swapfile
Bash

如你所見,只有 root 用戶的列才能啟用讀取和寫入標志。

現在我們的文件更安全了,我們可以通過鍵入以下命令來告訴我們的系統設置交換空間:

mkswap /swapfile
Bash
正在設置交換空間版本 1,大小 = 1048572 KiB 無標簽,UUID=d945f99d-f025-4b62-adde-1ea635329bfd
Bash

我們的文件現在已准備好用作交換空間。我們可以輸入以下命令來啟用它

swapon /swapfile
Bash

我們可以通過檢查我們的系統現在是否報告交換空間來驗證過程是否成功:

swapon -s
Bash
文件名        類型    大小  已用  權限
/swapfile                                file 1048572 0 -1
Bash

我們在這里有一個新的交換文件。我們可以 free 再次使用該實用程序來證實我們的發現:

free -m
Bash
              total        used        free shared buff/cache available Mem: 472 106 5 4 360 314 Swap: 1023 0 1023
Bash

我們的交換已成功建立,我們的操作系統將根據需要開始使用它。

6. 永久使交換文件

我們啟用了我們的交換文件,但是當我們重新啟動時,服務器不會自動啟用該文件。我們可以通過修改 fstab 文件來改變它。

vi /etc/fstab
Bash

在文件底部,你需要添加一行代碼,告訴操作系統自動使用你創建的文件:

/swapfile   none    swap    sw    0   0
Bash

完成后保存並關閉文件。

7. 調整你的交換設置

在處理交換時,可以配置幾個選項,這些選項會影響系統的性能。

該 swappiness 參數配置系統將數據從 RAM 交換到交換空間的頻率。這是介於 0 和 100 之間的值,表示百分比。

如果值接近零,內核將不會將數據交換到磁盤,除非絕對必要。請記住,與交換文件的交互是“昂貴的”,因為它們比與 RAM 的交互花費更多時間,並且可能導致性能的顯着降低。告訴系統不要太依賴交換通常會使系統更快。

接近 100 的值將嘗試將更多的數據放入交換中以努力保持更多的 RAM 空間。根據你的應用程序的內存配置文件或你使用的服務器,在某些情況下可能會更好。

通過輸入以下內容我們可以看到當前的 swappiness 值:

cat /proc/sys/vm/swappiness
Bash
60
Bash

對於桌面,60 的 swappiness 設置並不是一個壞的值。對於 VPS 系統,我們可能希望將其移近 0。

我們可以使用該 sysctl 命令將 swappiness 設置為不同的值。

例如,要將 swappiness 設置為 10,我們可以鍵入:

sysctl vm.swappiness=10
Bash
vm.swappiness = 10
Bash

該設置將持續到下一次重新啟動。我們可以在重啟時自動設置該值,方法是將該行添加到我們的 /etc/sysctl.conf 文件中:

vi /etc/sysctl.conf
Bash

在底部,你可以添加:

vm.swappiness=10
Bash

完成后保存並關閉文件。

你可能想要修改的另一個相關值是 vfs_cache_pressure 。此設置配置系統將選擇多少數據緩存 inode 和 dentry 信息。

基本上,這是訪問有關文件系統的數據。這通常是非常昂貴的查找和頻繁請求,所以對於你的系統來說緩存是一件很棒的事情。你可以通過 proc 再次查詢文件系統來查看當前值:

cat /proc/sys/vm/vfs_cache_pressure
Bash
100
Bash

正如目前配置的那樣,系統太快地從緩存中刪除索引節點信息。通過輸入以下內容,可以將其設置為更保守的設置,如 50:

sysctl vm.vfs_cache_pressure=50
Bash
vm.vfs_cache_pressure = 50
Bash

這只對目前的 session 有效。我們可以通過將它添加到配置文件中來改變它,就像使用 swappiness 設置一樣:

vi /etc/sysctl.conf
Bash

在底部,添加指定新值的行:

vm.vfs_cache_pressure = 50
Bash

完成后保存並關閉文件。

8. 結論

按照本指南中的步驟,將為你提供一些 Swap,以便使用 RAM。交換空間在避免一些常見問題方面非常有用。

如果遇到 OOM(內存不足)錯誤,或者如果發現系統無法使用所需的應用程序,則最佳解決方案是優化應用程序配置或升級服務器。然而,配置交換空間可以給你更多的靈活性。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM