• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Android Studio 构建失败

武飞扬头像
xdfxdf123456ikaros
帮助2

背景:

在日常调试Android Native代码时,点完Gradle Build便可拿起手边的快乐水小嘬一口,等着编译完成,若是刚刚改了一些影响范围较大的文件,亦或是pull了一下代码,一次build便可以打开手机小搓一下。但是某一次搓完手机回头看电脑时,gradle build faild出现在了build栏,甚至还是嘲讽的√号开头。

学新通

学新通

于是气不打一处来重启了 AS、重启了电脑,发现无济于事....所以开始认真解决问题了

排查步骤

首先怀疑的是Clang编译时间过长,导致Gradle的daemon Crash,因此导致整个build failed,于是关闭了gradle daemon,问题依旧。接下来尝试手动打开build的log查看崩溃点在哪里,发现clang居然OOM Crash了,而且每次Dump的位置还不一样,但是查看编译时的RAM消耗,发现至少还有1GB的RAM处于FREE,因此拓展内存的想法也被暂时放在后面。

学新通开始怀疑是不是gradle和AS对clang造成了什么影响,因为AS此时的JVM占用了近6GB的RAM。因此尝试关闭AS,手动调用Ninja对Native部分进行编译,发现编译正常通过,同时内存占用在编译到最后发生了一次快速增长,从300MB*8Clang Thread猛增到700MB*8Clang Thread,简单计算一下,原来之前编译到最后发生的卡顿有可能是引起了Swap,同时由于Swap空间有限,AS占用的RAM超过SWAP能释放的空间,引发了Clang的OOM Crash。所以.....没有办法,只能暂时在RAM上做妥协,一是缩减AS中JVM的RAM大小(因为主机又整了几根内存,所以JVM的RAM分配不减反增),二是提升整机的RAM容量。双管齐下后Gradle build正常工作。学新通

 总结

         没想到8核的Clang能吃掉如此之多的内存,因为Gradle 在 Failed没有dump出错误,因此问题排查的难度被提高了,同时由于Clang在申请内存时十分突然,导致Top工具和free等内存监控工具来不及刷新出内存平静就已经Crash了,因此真正的原因被放过了一次。还有就是吐槽AS现在每一个版本更新后,确实带来了很多不错的新功能,但是RAM消耗也越来越大了,对开发者主机的性能的要求也是一步步的提高了,经过这次问题解决,开发机RAM成功升级到32G(笑

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhhbehhc
系列文章
更多 icon
同类精品
更多 icon
继续加载