解决:编译安卓源码时 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