解決:編譯安卓源碼時 JDK 報錯 error='Not enough space' (errno=12)


背景

在編譯 Android 10 代碼的時候,OpenJDK發現報錯:

OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(.., .., 0) failed; error='Not enough space' (errno=12)

原因:運行或編譯占用內存巨大的大軟件大項目的過程中可能會出現 errno12(申請內存不足)

先執行命令 free -m 查看內存是不是還有 最主要的是 看有沒有交換空間 swap (這很重要)

如果沒有交換空間 或者交換空間比較小 要先安裝交換空間 或者增大空間

下面介紹在Ubuntu 18.04上通過擴大swapfile來增加swap空間以解決這個編譯問題

備注:下列操作都需要超級用戶權限

參考:

解決

執行命令並觀察swap空間是否存在和大小:

# free -h
              total        used        free      shared  buff/cache   available
Mem:            62G         11G         49G        5.3M        800M         49G
Swap:          2.0G        790M        1.2G

# swapon -s
Filename				Type		Size	Used	Priority
/swapfile                              	file    	2097148	806584	-2

刪除swapfile(如果之前有)

如果已經存在swapfile(例如:/swapfile),執行下面的命令刪除

swapoff /swapfile   #unmount swap文件
rm -rf /swapfile

再執行free和swapon -s ,檢查是否依然存在swap空間

創建更大的swapfile

創建一個16G的 /swapfile

dd if=/dev/zero of=/swapfile bs=1M count=16384

其中,16384=16×1024×1M,即創建了一個16G的swapfile。

  • if=指定輸入文件名,/dev/zero 代表 空

  • of=指定輸出文件名

  • bs=bytes:同時設置讀入/輸出的塊大小為bytes個字節

  • count=blocks:此為塊大小,等於以bs為單位指定的空間。

修改權限

chmode 0600 /swapfile

格式化

mkswap /swapfile

到這里,swapfile創建完畢

配置swap文件(如果之前沒有)

一般系統都會有掛載swapfile,但是如果沒有的話,就需要配置在系統啟動時掛載swap空間:

vim /etc/fstab

在最末增加新的一行:

/swapfile   	none 		swap   		 sw 		0 		0

啟動swap空間

swapon  /swapfile

可以執行 free -h ; swapon -s,看看swap空間大小

free -h
              total        used        free      shared  buff/cache   available
Mem:            62G         13G         28G         14M         20G         48G
Swap:           15G          0B         15G

swapon -s
Filename				Type		Size	Used	Priority
/swapfile               file    	16777212	0	-2

測試

重新編譯自己的項目,看看是否解決了OpenJDK的errno=12的問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM