zoukankan      html  css  js  c++  java
  • 解决:编译安卓源码时 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的问题。

  • 相关阅读:
    添加组合索引时,做相等运算字段应该放在最前面
    常用位运算
    redis php扩展简单使用
    mysql优化之简单概念
    mysql优化之sql语句优化
    简单画图 gd库函数
    win下 安装mongodb
    伪静态之实际应用
    tomcat win简单配置
    docker
  • 原文地址:https://www.cnblogs.com/schips/p/solve_a_problem_of_Not-enough-space_when_building_android.html
Copyright © 2011-2022 走看看