使 -j(作业)选项在构建 Android 时被忽略(默认为所有内核)



我正在使用以下命令序列构建Android-x86(nougat-x86分支(:

repo init -u git://git.osdn.net/gitroot/android-x86/manifest -b nougat-x86
repo sync --no-tags --no-clone-bundle
virtualenv2 venv
. venv/bin/activate
. build/envsetup.sh
lunch android_x86_64-userdebug
export ANDROID_JACK_VM_ARGS="-Xmx4g -XX:+TieredCompilation -Dfile.encoding=UTF-8"
export JACK_SERVER_VM_ARGUMENT=$ANDROID_JACK_VM_ARGS
export SERVER_NB_COMPILE=1
export USE_CCACHE=1
LANG=C LC_ALL=C make -j2 iso_img

请注意我如何在最后一行指定两个带有选项-j2的 make 作业。

无论如何,该构建实际上正在生成 8 个clang/clang++/javac和其他任何过程。

这会导致生成失败:

超出 GC 开销限制
尝试使用 java 选项 '-Xmx' 增加堆大小
警告:这可能产生了部分输出或损坏的输出。
忍者:构建停止:子命令失败。
制造:*** [ninja_wrapper] 错误 1

使构建某些目标


失败 如何强制执行-j2选项以确保我的 CPU 和 RAM 没有用完?

原因:JACK 服务器是邪恶的。

下面解决了内存不足问题:

./prebuilts/sdk/tools/jack-admin kill-server
rm -rf ~/.jack*    
export ANDROID_JACK_VM_ARGS="-Xmx4g -XX:+TieredCompilation -Dfile.encoding=UTF-8"
export SERVER_NB_COMPILE=2
export JACK_SERVER_VM_ARGUMENT=$ANDROID_JACK_VM_ARGS
./prebuilts/sdk/tools/jack-admin install-server prebuilts/sdk/tools/jack-launcher.jar prebuilts/sdk/tools/jack-server-4.*.ALPHA.jar
./prebuilts/sdk/tools/jack-admin start-server

非常感谢FUCK JACK!项目。修改了脚本,其中包含问题 #2 和 PR 5 中的更改。


不太明显的是,构建失败不是因为机器内存不足,而是因为 JACK 服务器已经耗尽。事实上,错误消息说...

尝试使用java 选项 '-Xmx' 增加堆大小

(强调我的(。

这个网页在 http://www.2net.co.uk/blog/jack-server.html 解释...

(...( 让我们看一下两台不同计算机上的默认堆大小。 默认堆大小根据内存总量进行缩放 安装,忽略交换空间。在 16 GiB 的机器上,它超过 3 GiB:

$ java -XshowSettings 2>&1  | grep Heap
Max. Heap Size (Estimated): 3.47G

但是,在 8 GiB 的机器上,它小于 2 GiB:

$ java -XshowSettings 2>&1  | grep Heap
Max. Heap Size (Estimated): 1.71G

事实证明,插孔服务器需要大约 3 GiB 来构建一个典型的 AOSP 牛轧糖目标,因此如果机器没有足够的目标,它会失败 公羊。增加交换空间没有区别。

好。因此,使用上述命令,我能够将堆大小增加到 4GiB,并且可以毫无错误地进行编译。


现在。。。

如何强制执行 -j2 选项以确保我的 CPU 和 RAM 没有用完?

(https://android.googlesource.com/platform/prebuilts/sdk/+/master/tools/README-jack-server.md(的页面说

配置属性文件

它包含插孔服务器配置属性。修改 重新启动服务器后,将考虑这些设置。 具有默认值的说明如下:

jack.server.max-service=<number>最大同时插孔数 任务。默认值为 4。

(...

如果您的计算机在编译过程中无响应:

您可以通过减少插孔的数量来改善这种情况 通过编辑您的同时编译$HOME/.jack-server/config.properties和变化 jack.server.max-service 到较低的值,然后重新启动 服务器。


TL;博士:

jack.server.max-service=2$HOME/.jack-server/config.properties并重新启动 JACK 服务器。

最新更新