我的Android项目在具有大量RAM的Windows开发机器上构建得很好。但是在一个简单的Docker容器(FROM ubuntu:xenial + Android SDK)中,gradle build(./gradlew assembleTrunkDebug)在执行任务时失败了58%:
transformClassesWithPreJackPackagedLibrariesForTrunkDebug
即使使用--stacktrace --debug,我从错误中获得的最多是:
Gradle build daemon disappeared unexpectedly (it may have been killed or may have crashed)
我注意到有几件奇怪的事情: 我传递给docker容器实例化的内存参数无关紧要。它总是向我显示相同的内存统计信息。
Tasks: 2 total, 1 running, 1 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1019776 total, 860604 free, 88840 used, 70332 buff/cache
KiB Swap: 1168688 total, 853640 free, 315048 used. 824484 avail Mem
我通常会这样做:
docker run -it --volume=/Users/MyUser/code/localDebugRepo:/localDebugRepo --workdir="/localDebugRepo" --memory="2048m" --memory-swap="2048m" 66b48030ee34 /bin/bash
但我也尝试传递更少的内存和相同的内存交换或更多的总内存,但它总是向我显示Mem:1019776和Swap:1168688。
我还在任务管理器中注意到VBoxHeadless.exe只使用了41MB的RAM。虽然不幸的任务正在运行(崩溃前需要很长时间),但RAM的使用并没有改变,但磁盘传输量很大,而且只消耗越来越多(因为它在SSD驱动器上)。
Android建议用于最新sdks的新构建工具Jack和Jill必须允许使用至少1536m的内存。但是Docker镜像应该以最大2048m的速度运行,并且考虑到我无法缩小交换,我觉得那里出了问题。那么有什么想法会导致这种一致的错误?