我的 Android 项目在具有大量 RAM 的 Windows 开发机器上构建良好。但是在一个简单的 Docker 容器(来自 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 的速度运行,并且考虑到我无法缩小交换空间,我感觉那里出了点问题。
那么有什么想法可能导致这种一致的错误吗?