Android Studio 构建失败

背景:

在日常调试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(笑

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值