2021年3月20日 星期六

樹莓派出現無法衍生進程 (無法配置記憶體) 問題

今天複習了一些 Flask 架站方法, 回到鄉下家想用樹莓派試試, 遠端開啟終端機卻出現 "無法衍生進程 (無法配置記憶體)" 訊息視窗 :




第一次遇到這情況, 搜尋找到下面這篇文章, 才知道原來 Pi 3 的 1G DRAM 其實差強人意, 如果多開幾個瀏覽器頁籤就可能耗用過多記憶體而出現上面這個錯誤訊息, 當然終端機視窗就開不出來了, 參考 : 


文章建議擴大 Swap 空間 (swap space), 但甚麼是 Swap 空間? 參考下面這篇 : 


所謂 Swap 空間其實就是虛擬記憶體概念, 是在硬碟中劃出一塊區域 (具體來說就是 /var/swap 這個檔案) 當作虛擬的邏輯記憶體, Linux 的分頁記憶體管理程式會適時將實體記憶體中不常用的資料移到虛擬記憶體中暫時保存, 以便騰出更多實體記憶體空間來載入其它程式與資料, 當要用到這個資料時再從 Swap 空間中移回實體記憶體, 如此便可解決實體記憶體不足的問題. 

可用 free -h 指令查詢目前記憶體的使用情形, 我的 Pi 3 在只開啟一個終端機情形下空閒記憶體約有 218MB : 

pi@raspberrypi:~ $ free -h
              total        used        free      shared  buff/cache   available
Mem:           927M        394M        218M         62M        313M        418M
Swap:           99M         94M        5.7M

新開一個 Chrome 視窗後檢查只剩 57MB : 

pi@raspberrypi:~ $ free -h
              total        used        free      shared  buff/cache   available
Mem:           927M        507M         57M         82M        361M        294M
Swap:           99M         99M        796K

可見一個 Chrome 就吃掉 160 MB 左右, 出現上面錯誤視窗是在開啟兩個 Chrome 頁籤的情況下, 難怪要再開一個終端機就 GG 了, 顯然預設的 100MB 交換空間是不夠的.

也可以用 swapon -s 檢查 Swap 空間的配置與使用情形, 它會顯示 Swap 交換檔 /var/swap 的情況 : 

pi@raspberrypi:~ $ swapon -s   
Filename Type Size Used Priority
/var/swap                              file    102396 102396 -2

樹莓派的交換空間大小的設定放在 /etc/dphys-swapfile 檔案的 CONF_SWAPSIZE 參數裡, 預設值為 100 (單位 MB), 只要將此設定值放大 (例如 1000) 即可減少出現上面那個錯誤視窗的機率; 也可以直接將此設定最前面用 # 註解掉, 讓作業系統自動計算並調整交換空間的大小. 

用 nano 編輯 /etc/dphys-swapfile 檔案 : 

pi@raspberrypi:~ $ sudo nano /etc/dphys-swapfile      (注意須用 sudo)

將 CONF_SWAPSIZE=100 這一行註解掉 (前面加個 #) : 

# set size to absolute value, leaving empty (default) then uses computed value
#   you most likely don't want this, unless you have an special disk situation
#CONF_SWAPSIZE=100    

然後按 CTRL+O 存檔後按 CTRL+X 關閉檔案, 最後用下列指令重新執行 Swap 配置 : 

pi@raspberrypi:~ $ sudo service dphys-swapfile restart    

再執行 swapon -s 檢查交換空間配置, 可見 Linux 自動配置了約 2GB 的交換空間 : 

pi@raspberrypi:~ $ swapon -s
Filename Type Size Used Priority
/var/swap                              file    1918972 0 -2

用 free -h 檢查結果差不多 (略少的 1.8 GB) : 

pi@raspberrypi:~ $ free -h
              total        used        free      shared  buff/cache   available
Mem:           927M        609M         28M         72M        289M        202M
Swap:          1.8G          0B        1.8G   

這樣就可避免發生實體空間不夠用的問題了. 

參考 : 


沒有留言 :