如何在 Ubuntu 16.04 上啟用或新增交換空間
在這篇文章中,我們將學習如何在 Ubuntu 16.04 上啟用或新增交換分割槽。實際上,交換空間可以透過防止應用程式出現記憶體不足錯誤來提高伺服器的響應速度。預設情況下,Ubuntu 不會啟用交換空間。我們將學習如何在 Ubuntu 16.04 伺服器上新增或啟用交換檔案。
交換空間是一個檔案或位置,用於處理RAM不需要立即使用的臨時資料,它可以增加伺服器處理工作流程資訊的能力,並在RAM不足時為應用程式提供儲存空間。
檢查交換資訊
在開始之前,我們將首先檢查伺服器或系統上可用的交換空間。
我們可以使用以下命令檢視系統是否已啟用交換分割槽。
$ free -h total used free shared buffers cached Mem: 2.0G 1.9G 80M 11M 156M 1.0G -/+ buffers/cache: 738M 1.2G Swap: 0B 0B 0B
我們也可以執行以下命令,但是如果交換分割槽不存在,我們將看不到任何資訊。
$ sudo swapon -s Filename Type Size Used Priority
從上面的命令可以看出,此伺服器未啟用或配置交換空間。我們將首先使用以下命令檢查可用的空閒磁碟空間:
$ df –h Filesystem Size Used Avail Use% Mounted on udev 996M 4.0K 996M 1% /dev tmpfs 201M 396K 200M 1% /run /dev/xvda1 7.8G 5.8G 1.7G 79% / none 4.0K 0 4.0K 0% /sys/fs/cgroup none 5.0M 0 5.0M 0% /run/lock none 1001M 0 1001M 0% /run/shm none 100M 0 100M 0% /run/user
我們可以在 `/dev/xvda1` 上看到一些空間,或者我們可以連線新的磁碟驅動器來用作交換分割槽。在本例中,我們將使用 `/dev/xvda1` 作為交換分割槽。
建立交換檔案
在我們知道磁碟空間可用性後,我們就可以在檔案系統上建立交換檔案了。要建立交換檔案,我們可以使用 `fallocate` 包或實用程式,它可以建立預分配大小的檔案。由於伺服器上的空間有限,我們將建立一個大小為 512 MB 的交換檔案,以下是建立交換檔案的命令:
$ sudo fallocate -l 512M /swapfile
要檢查交換檔案,我們將使用以下命令:
$ ls -lh /swapfile -rw-r--r-- 1 root root 512M Sep 6 14:22 /swapfile
啟用交換檔案
在啟用交換之前,我們需要修改檔案許可權,以便 root 以外的使用者可以讀取/寫入該檔案,以下是更改檔案許可權的命令:
$ sudo chmod 600 /swapfile
更改許可權後,我們將檢查該檔案,並執行以下命令來檢查交換檔案的許可權:
$ ls -lh /swapfile -rw------- 1 root root 512M Sep 6 14:22 /swapfile
我們將使用以下命令將此檔案設定為交換空間:
$ sudo mkswap /swapfile Setting up swapspace version 1, size = 524284 KiB no label, UUID=d02e2bbb-5fcc-4c7b-9f85-4ae75c9c55f9
現在,我們將使用以下命令啟用交換:
$ sudo swapon –s Filename Type Size Used Priority /swapfile file 524284 0 -1
我們也可以使用 `free -h` 命令來檢視交換分割槽。
$ free –h total used free shared buffers cached Mem: 2.0G 1.8G 110M 11M 189M 940M -/+ buffers/cache: 759M 1.2G Swap: 511M 0B 511M
使交換分割槽/檔案永久生效
按照上述步驟,我們已經建立了交換分割槽,並且能夠使用它作為臨時記憶體。但是,一旦機器重新啟動,交換設定就會丟失。為了永久使用交換檔案,我們將使交換檔案永久生效。
我們將編輯 `/etc/fstab` 檔案,並新增資訊以在重新啟動機器後掛載交換檔案。
$ sudo vi /etc/fstab
將以下行新增到現有檔案中:
/swapfile none swap sw 0 0
為了更好地使用交換記憶體,我們可以進行一些調整。
快取壓力設定
我們可以使用以下命令檢視當前的快取壓力設定:
$ cat /proc/sys/vm/vfs_cache_pressure 100
當前設定將更快地清除快取資訊,我們將使用以下命令將這些設定設定為 60:
$ sudo sysctl vm.vfs_cache_pressure=60 vm.vfs_cache_pressure = 60
由於此設定是臨時的,系統重新啟動後所有設定都將丟失,因此要使其永久生效,請編輯 `/etc/sysctl.conf` 檔案並新增以下行 `vm.vfs_cache_pressure=60`。
$ sudo vi /etc/sysctl.conf # Accept ICMP redirects only for gateways listed in our default # gateway list (enabled by default) # net.ipv4.conf.all.secure_redirects = 1 # # Do not send ICMP redirects (we are not a router) #net.ipv4.conf.all.send_redirects = 0 # # Do not accept IP source route packets (we are not a router) #net.ipv4.conf.all.accept_source_route = 0 #net.ipv6.conf.all.accept_source_route = 0 # # Log Martian Packets #net.ipv4.conf.all.log_martians = 1 # vm.vfs_cache_pressure=60
`swappiness` 設定
`swappiness` 是一個配置設定,它定義了交換資料交換到交換空間的頻率。`swappiness` 的值是 0 到 100 的百分比,接近零的值表示除非需要移動,否則不會交換資料;接近 100 的值將更頻繁地將資料放入交換空間,以釋放更多 RAM。
我們可以使用以下命令檢視當前設定:
$ cat /proc/sys/vm/swappiness 60
如果這是桌面系統,我們可以使用此 `swappiness` 設定,但我們正在配置伺服器,因此 `swappiness` 應接近 10-20。
這裡我們將 `swappiness` 配置為 20,以下是將 `swappiness` 設定為 20 的命令:
$ sudo sysctl vm.swappiness=20 vm.swappiness = 20
此設定是臨時的,如果需要永久新增此 `swappiness` 設定,則需要編輯 `/etc/sysctl.conf` 檔案,並將以下行新增到檔案末尾:
$ sudo vi /etc/sysctl.conf # Accept ICMP redirects only for gateways listed in our default # gateway list (enabled by default) # net.ipv4.conf.all.secure_redirects = 1 # # Do not send ICMP redirects (we are not a router) #net.ipv4.conf.all.send_redirects = 0 # # Do not accept IP source route packets (we are not a router) #net.ipv4.conf.all.accept_source_route = 0 #net.ipv6.conf.all.accept_source_route = 0 # # Log Martian Packets #net.ipv4.conf.all.log_martians = 1 # vm.vfs_cache_pressure=50 vm.swappiness=10
在上面的文章中,透過設定和配置,我們可以解決伺服器的記憶體不足問題。我們可以建立一個交換分割槽,並調整交換設定以更有效地使用交換分割槽。