Linux 中 SWAP (交換分區),指的是類似於 Windows 的虛擬記憶體,就是當記憶體不足的時候,把一部分硬碟空間虛擬成記憶體使用,從而解決突發的記憶體容量不足的情況。
內容目錄:
- 檢查 swap 空間
- 檢查文件系統
- 創建 swap
- 格式化並啟動 swap
- 啟動 swap
而這是一篇舊文章了,之前發表在 support 論壇裡,這個論壇已經沒有功能了,所以將之關閉,裡面一些文章移轉到這個網誌來。
Vultr 和 DigitalOcean 的 VPS 主機在開新方案後,預設置是不會有 swap 交換分區,不像 Linode 在管理後台 Rebuild 時,就可以設置 swap 分區大小。
swap 要設置多大,可以依以你的 VPS RAM 來判斷。
例如:
1GB RAM 那你的 swap 交換分區就可以設置 1024MB,Vultr 768RM 方案,swap 可以設置 512MB,一般最大可以設置到 8GM。
不過我也碰過老外工程師設置過獨服 swap 交換分區 32GB,可能認為我的 HD 不用錢吧 !
如何手動添加 swap 呢? ( CentOS / Ubuntu )
檢查 Swap 空間
在設置 swap 文件之前,有必要先檢查一下系統裡有沒有既存的 swap 文件。
swapon -s
如果返回的信息概要是空的,則表示 swap 文件不存在。
檢查文件系統
在設置 swap 文件之前,同樣有必要檢查一下文件系統,看看是否有足夠的硬碟空間來設置 swap。
df -hal
檢查返回的信息,還剩餘足夠的硬碟空間即可。
創建 swap
下面使用 dd 命令來創建 swap 文件。
dd if=/dev/zero of=/swapfile bs=1024 count=524288
回覆訊息
524288+0 records in
524288+0 records out
536870912 bytes (537 MB, 512 MiB) copied, 2.2845 s, 235 MB/s
格式化並啟動 swap
上面已經創建好 swap 文件,還需要格式化後才能使用。
mkswap /swapfile
回覆訊息
Setting up swapspace version 1, size = 512 MiB (536866816 bytes)
no label, UUID=b247ba10-f7cf-47b7-aa65-f69b2cfcc8fd
啟動 swap
swapon /swapfile
回覆訊息
swapon: /swapfile: insecure permissions 0644, 0600 suggested.
以上步驟做完,再一次運行命令:
swapon -s
回覆訊息
Filename Type Size Used Priority
/swapfile file 524284 0 -1
如果要 VPS 主機重啟的時候自動掛載 swap ,那麼還需要修改 fstab 配置,用 vim 打開 / etc / fstab 文件,在其最後添加如下一行:
vi /etc/fstab
/swapfile swap swap defaults 0 0
最後,賦予 swap 文件適當的權限:
chown root:root /swapfile
chmod 0600 /swapfile
同時,我們還可以修改 Linux swap 空間的 swappiness ,降低對硬碟的緩存。
Linux 會使用硬碟的一部分做為 swap 分區,用來進行進程調度。
進程是正在運行的程序,把當前不用的進程調成「等待 ( standby )」,甚至「睡眠 ( sleep )」。
一旦要用,再調成「活動 ( active )」,睡眠的進程就會在 swap 分區,把內存空出來讓給「活動」的進程。
如果記憶體夠大,應當告訴 Linux 不必太多的使用 swap 分區,可以通過修改 swappiness 的參數來設置。
swappiness = 0 的時候表示最大限度使用物理內存,然後才是 swap 空間。
swappiness = 100 的時候表示積極的使用 swap 分區,並且把內存上的數據及時的搬運到 swap 空間裡面。
在 CentOS 中,swappiness 的默認值是 60。
通過以下命令可以看到:
cat /proc/sys/vm/swappiness
返回值 60
我們可以調整 swappiness 的值到一個合適的參數,從而達到最優化使用 swap 的目的。
這裡我們將其設為 10。使用 sysctl 命令:
sysctl vm.swappiness=10
但是這只是臨時性的修改,在你重啟系統後會恢復默認的 60,要永久設置,還需要在 vim 中修改 sysctl.conf:
vi /etc/sysctl.conf
在這個文檔的最後加上這樣一行:
# Search for the vm.swappiness setting. Uncomment and change it as necessary.
vm.swappiness=10
輸入 :qw,保存退出 vim 。
這樣一來,swap 分區重啟後都會生效了。
補充 swap file 計算方法:
建立 512MB 的 swap,一次讀寫 1024bytes
bs=1024 count=524288 # 1024 * 512M = 524288 block size
or
bs=1M count=4096
發佈留言