• Android13 编译ninja failed with: exit status 137


    描述

    现象很奇怪,主机是ubuntu 18.04, 内存有32G,并且系统中有两份Android13代码, 有一份编译正常,另外一份编译不正常,一度以为是因为下载源码不齐全导致,后面仔细看日志,原来是内存不够,导致OOM-killer杀死了。

    现象

    分析:

    当前界面没有太多可以参考的出错信息,看日志:  out/soong.log,里面没有类似指明哪个代码出错的信息

    2024/02/21 19:44:35.273170 build/soong/ui/build/exec.go:74: "dumpvars" finished with exit code 0 (932ms real, 795ms user, 89ms system, 343MB maxrss)


    2024/02/21 19:47:22.609247 build/soong/ui/build/exec.go:74: "soong bootstrap" finished with exit code 0 (2m27.983s real, 5m26.38s user, 25.136s system, 22311MB maxrss)
     

    2024/02/21 19:48:40.257101 build/soong/ui/build/exec.go:74: "ckati" finished with exit code 0 (40ms real, 5ms user, 2ms system, 362MB maxrss)
     

    2024/02/21 19:48:40.281063 build/soong/ui/build/exec.go:64: "ninja" executing "prebuilts/build-tools/linux-x86/bin/nsjail" [-x prebuilts/build-tools/linux-x86/bin/ninja -H android-build --cwd /mnt/4T_disk/jihaoqi/cuttlefish/srd-a13-r74/toptree13 -t 0 -e --proc_rw -u nobody -g nogroup --rlimit_as soft --rlimit_core soft --rlimit_cpu soft --rlimit_fsize soft --rlimit_nofile soft -R / -B /tmp -B /mnt/4T_disk/jihaoqi/cuttlefish/srd-a13-r74/toptree13 -B /mnt/4T_disk/jihaoqi/cuttlefish/srd-a13-r74/toptree13/out --disable_clone_newcgroup -q -- -d keepdepfile -d keeprsp -d stats --frontend_file out/.ninja_fifo droid -j 16 -f out/combined-aosp_cf_x86_64_phone.ninja -o usesphonyoutputs=yes -w dupbuild=err -w missingdepfile=err]
    2024/02/21 19:54:04.317254 build/soong/ui/build/exec.go:74: "ninja" finished with exit code 137 (5m24.036s real, 1m58.562s user, 12.006s system, 17723MB maxrss)
    2024/02/21 19:54:04.360249 build/soong/ui/build/exec.go:127: ninja failed with: exit status 137
    2024/02/21 19:54:04.493015 build/soong/ui/status/critical_path.go:111: critical path took 2m22s
    2024/02/21 19:54:04.493026 build/soong/ui/status/critical_path.go:114: elapsed time 8m44s
    2024/02/21 19:54:04.493048 build/soong/ui/status/critical_path.go:116: perfect parallelism ratio 27%
    2024/02/21 19:54:04.493052 build/soong/ui/status/critical_path.go:120: critical path:
    2024/02/21 19:54:04.493057 build/soong/ui/status/critical_path.go:125:     0:14 regenerate globs shard 117 of 1024
    2024/02/21 19:54:04.493060 build/soong/ui/status/critical_path.go:125:     2:08 analyzing Android.bp files and generating ninja file at out/soong/build.

    发现执行ninja的时候出错,也就是编译的时候出错,前面执行,"dumpvars","ckati"退出码都是0,说明正常,ninja发现退出码是错误码137,通过查询:

    Ninja 中的退出状态 137 通常表示构建过程由于内存问题而终止。错误代码 137 通常与 Linux OOM(内存不足)相关,会在系统内存不足时杀死进程。

    为了解决这个问题,您可以尝试以下解决方案:

    1. 增加可用内存:如果可能,请为系统分配更多内存或增加执行 Ninja 的进程的内存限制。

    2. 优化资源使用:检查任何不必要的后台进程或消耗过多内存的应用程序并终止它们。关闭所有不必要的浏览器选项卡或同时运行的应用程序。

    3. 修改构建设置:如果您可以控制构建配置,请考虑使用该标志调整 Ninja 中并发作业的数量来减少并行性-j。例如,ninja -j4将其限制为一次只能执行四个作业。

    4. 拆分为较小的构建:如果您的项目很大,请将其拆分为较小的组件并单独构建它们,以减少编译期间的内存使用量。

    5. 升级硬件:如果上述选项均不起作用,并且您经常遇到内存不足问题,则可能需要升级硬件(例如,添加更多 RAM)。

    看系统日志/var/log/syslog,也充分说明了这个问题

    解决方法

    增加swap分区空间;

    1. # 将现有swap移动到主内存,可能需要几分钟
    2. sudo swapoff -a
    3. # 创建新的swap文件,bs×count=最后生成的swap大小,这里设置8G
    4. sudo dd if=/dev/zero of=/swapfile bs=1G count=8
    5. # 设置权限
    6. sudo chmod 0600 /swapfile
    7. # 设置swap
    8. sudo mkswap /swapfile
    9. # 打开swap
    10. sudo swapon /swapfile
    11. # 检查设置是否有效
    12. grep Swap /proc/meminfo # 或者htop看一下
    13. # 设置永久有效
    14. sudo gedit /etc/fstab
    15. # 在末尾行加上
    16. # /swapfile swap swap sw 0 0

    以上解决方法参考: 链接:https://juejin.cn/post/7158741169001168927

  • 相关阅读:
    spring boot + mybaties-plus 数据库字段加解密
    针不戳 腾讯开源GitHub星标125K微服务架构进阶宝典
    视频化全链路智能上云?一文详解什么是阿里云视频云「智能媒体生产」
    python基于django的网上人才招聘系统
    某校帮签到小程序m 加密参数解析
    一文详解手眼标定公式推导
    LeetCode 724. Find Pivot Index / 1991. Find the Middle Index in Array
    SystemVerilog学习-07-类的继承和包的使用
    富格林:学习安全技能阻挠诱导虚假
    FreeRTOS 消息队列 详解
  • 原文地址:https://blog.csdn.net/ldswfun/article/details/136219877