起因及背景
近期編譯AOSP(android 10.0)是總是遇到內存溢出,查了半天,無果。猜測增加下swap空間大小是否能解決,隨即嘗試下,果然是如此。
當然,還有其他作法,比如直接增加主機的內存(硬件方案)。
我的系統是Ubuntu 18.04。
Linux下swap空間大小通常在安裝系統時設置swap分區時預設的,不過系統提供了添加或改動swap分區的命令。
涉及的命令
- free:查看內存狀態命令,可以顯示memory、swap、buffer/cache等的大小及使用狀況;
- dd:讀取,轉換並輸出數據命令;
- mkswap:設置交換區
- swapon:啟用交換區,相當於mount
- swapoff:關閉交換區,相當於umount
查看swap空間大小
通過查看內存狀態命令free
可以獲得swap空間大小,正常狀況下可使用以下三個命令之一:
free
free -m
free -h
比如下面是free -h
在我主機上的輸出:
$ free -h
total used free shared buff/cache available
Mem: 13G 3.5G 2.7G 367M 7.4G 9.4G
Swap: 11G 126M 11G
關閉所有交換分區
命令如下:
swapoff -a
通過swap分區文件增加swap空間
1. 創建swap分區的文件
dd if=/dev/zero of=swapfile bs=1M count=1024
其中bs
是每塊的大小,count
是塊的數量;bs*count
,就是swap文件的大小:這里1M*1024=1G。可以根據需要自行調整。
此外,swapfile
是swap文件的路徑,可以根據需求修改。
2. 格式化交換分區文件
mkswap swapfile
這里的路徑和之前的路徑要對應起來。
3. 啟用swap分區文件
swapon swapfile
4. 添加開機啟動
修改/etc/fstab
這個文件,添加或者修改這一行:
swapfile swap swap defaults 0 0
注意,路徑還是要對應,而且必須是全路徑。最后兩個是零,不是大寫字母O。
此項不是必須的。如果不修改開機啟動配置,重啟之后的swap空間會重置,之前配置丟失。
通過新建分區來擴展原有swap空間
這個是Linode的默認做法,這里也介紹一下。此方法與swap文件類似,只是使用了一個獨立分區,而不是文件。
- 使用fdisk創建交換分區(假設是
/dev/sdb2
) - 使用mkswap設置交換分區:
mkswap /dev/sdb2
- 啟用交換分區
swapon /dev/sdb2
- 修改
/etc/fstab
添加到開啟啟動項:
/dev/sdb2 swap swap defaults 0 0
小結
本文簡單介紹了在Linux如何實現swap空間的增大,主要使用了swapon/swapoff/free等命令,僅供后續參考。