CentOS7上配置Swap交換空間

前言

swap通常在傳統機械硬盤上表現更好,在SSD上使用swap可能會造成問題,尤其是硬件老化之後。所以,對於DigitalOcean以及其他使用基於SSD的雲主機服務的用戶,我們不推薦啓用swap。這甚至會影響到跟你的虛擬機共用宿主機的其他用戶。

對於DigitalOcean用戶,提升性能的最佳方法就是更新Droplet。通常來說,升級後的主機表現都會有所提升,並且更不容易受到硬件問題的影響。

配置Swap

1.檢查系統的Swap信息

查看是否已經配置過swap。一個系統可以設置多個swap,不過一般來說一個就夠了。 執行swapon -s,如果該命令沒有返回出結果,則代表該系統尚未配置過swap。 或者,我們也可以使用free -m來查看系統的整體內存使用情況,這裏可以看到內存和swap的使用狀態(顯示單位爲MB): 這裏可以看到我們這個系統的total swap空間爲0,即沒有配置過swap。這與我們在swapon裏看到的結果相符合。

free -m
             total       used       free     shared    buffers     cached
Mem:          3953        315       3637          8         11        107
-/+ buffers/cache:        196       3756
Swap:            0          0       4095

2. 檢查可用的存儲空間。

通常,我們建立一個單獨的分區作爲swap。然而有時候由於硬件或軟件的限制,新建分區的方式無法實現,這種情況下就可以建立一個swap文件來實現同樣的功能。

df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        59G  1.5G   55G   3% /
devtmpfs        2.0G     0  2.0G   0% /dev
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           2.0G  8.3M  2.0G   1% /run
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup

3.創建Swap文件

合適的swap空間是多大?一般來說,內存容量的兩倍就是個不錯的起點。 接下來我們要在根目錄下創建一個名叫swapfile的文件,當然你也可以選擇你喜歡的文件名。該文件分配的空間將等於我們需要的swap空間。 最快捷的創建方式是fallocate命令,該命令能夠創建一個預分配指定大小空間的文件。輸入如下指令創建一個4GB的文件:sudo fallocate -l 4G /swapfile 該swap文件將立即創建完畢。我們可以用ls命令檢查文件大小:ls -lh /swapfile 至此,我們的swap文件就創建完畢了。

4. 啓用Swap文件

現在我們已經有了swap文件,但系統還不知道應該使用該文件作爲swap,這就需要我們告知系統將該文件格式化爲swap並啓用起來。 首先我們需要更改swap文件的權限,確保只有root纔可讀,否則會有很大的安全隱患。

使用chmod命令進行權限操作:sudo chmod 600 /swapfile

如此,該文件的讀寫都只有root才能操作。使用ls -lh命令檢查一下:

ls -lh /swapfile
-rw------- 1 root root 4.0G Oct 30 11:00 /swapfile

然後,使用如下命令告知系統將該文件用於swap:sudo mkswap /swapfile

現在,這個swap文件就可以作爲swap空間使用了。輸入如下命令開始使用該swap:sudo swapon /swapfile

我們可以輸入如下命令來確認一下設置是否已經生效:

swapon -s
Filename                Type        Size    Used    Priority
/swapfile               file        4194300 0     -1

可以看到返回的結果中已經有我們剛纔設置的swap。再使用free工具確認一下:

free -m
             total       used       free     shared    buffers     cached
Mem:          3953        315       3637          8         11        107
-/+ buffers/cache:        196       3756
Swap:         4095          0       4095

至此,我們的swap已經設置完畢,操作系統會在需要的時候使用它。

5. 使Swap文件永久生效

至此我們已經在系統中啓用了swap文件,然而一旦系統重啓後,服務器還不能自動啓用該文件。要讓系統在重啓後自動生效swap,我們可以通過修改fstab文件來實現(這是一個管理文件系統和分區的表)。 用sudo權限打開該文件編輯:sudo vim /etc/fstab 在文件末尾加入下面這行內容,告訴操作系統自動使用剛纔創建的swap文件: /swapfile swap swap sw 0 0 添加完畢後,保存退出。以後服務器每次重啓都會檢查該文件並自動啓用swap。

更改Swap配置(可選)

有幾個涉及swap的選項可能會影響到系統的性能表現。大部分情況下這些選項是可選的

Swappiness

swappiness參數決定了系統將數據從內存交換到swap空間的頻率,數值設置在0到100之間,代表系統將數據從內存交換到swap空間的力度。

該數值越接近於0,系統越傾向於不進行swap,僅在必要的時候進行swap操作。由於swap要比內存慢很多,因此減少對swap的依賴意味着更高的系統性能。

該數值越接近於100,系統越傾向於多進行swap。有些應用的內存使用習慣更適合於這種情況,這也於服務器的用途有關。

輸入如下命令查看當前的swappiness數值:cat /proc/sys/vm/swappiness #30

CentOS 7默認設置了30的swappiness,這對於大部分桌面系統和本地服務器是比較中庸的數值。對於VPS系統而言,可能接近於0的值是更加合適的。

使用sysctl命令可以修改swappiness。比如將swappiness設爲10:sudo sysctl vm.swappiness=10

本次修改將一直生效到下次重啓前。如果希望永久修改該數值,則需要編輯sysctl配置文件:

sudo vim /etc/sysctl.conf
將以下內容粘貼到文件末尾:
vm.swappiness = 10

編輯完成後,保存退出,之後服務器每次重啓的時候會將swappiness設置爲該值。

緩存壓力(Cache Pressure )

另一個可以考慮更改的配置項是vfs_cache_pressure,該配置項涉及特殊文件系統元文件條目的存儲。對此類信息的頻繁讀取是非常消耗性能的,所以延長其在緩存的保存時間可以提升系統的性能。

通過proc文件系統查看緩存壓力的當前設定值:cat /proc/sys/vm/vfs_cache_pressure #100

這個數值是比較高的,意味着系統從緩存中移除inode信息的速度比較快。一個保守一些的數值是50,使用sysctl命令進行設置:

sudo sysctl vm.vfs_cache_pressure=50

這條命令僅在重啓前有效。要讓該設置永久有效,需要編輯sysctl配置文件:

sudo vim /etc/sysctl.conf
在文件末尾添加如下內容:
vm.vfs_cache_pressure = 50
保存退出,服務器就會在每次重啓後都自動將緩存壓力設置爲50了。

總結

至此,我們的系統內存就獲得了一些喘氣的空間。有了swap空間可以有效避免一些常見的問題。

如果你仍然會遇到內存不足(OOM,out of memory)的錯誤信息,或者你的系統不能運行你需要的應用,那麼最好的方法是優化你的應用配置或者升級你的服務器。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章