为什么我的Kotlin Gradle build在退出代码为137时死亡?
当运行Kotlin代码库的测试时,我们在CI环境中看到了神秘的失败为什么我的Kotlin Gradle build在退出代码为137时死亡?,gradle,kotlin,Gradle,Kotlin,当运行Kotlin代码库的测试时,我们在CI环境中看到了神秘的失败 gradletest编译了代码,测试结果很好。测试开始了,似乎都通过了。但随后Gradle退出了,代码为137(表明它被SIGKILL杀死),CI系统因此认为构建失败了 限制Gradle的JVM大小没有帮助。--no-daemon和--max-workers选项也没有 这是在Java 8 JVM上使用Kotlin 1.2.40和Gradle 4.3。本例中的罪魁祸首是Kotlin编译器 默认情况下,Kotlin编译器在后台生成守
gradletest
编译了代码,测试结果很好。测试开始了,似乎都通过了。但随后Gradle退出了,代码为137(表明它被SIGKILL杀死),CI系统因此认为构建失败了
限制Gradle的JVM大小没有帮助。--no-daemon
和--max-workers
选项也没有
这是在Java 8 JVM上使用Kotlin 1.2.40和Gradle 4.3。本例中的罪魁祸首是Kotlin编译器 默认情况下,Kotlin编译器在后台生成守护进程,以便后续编译作业更快。对于非平凡大小的Kotlin代码库,此过程最终可能消耗大量内存 它的存在导致Gradle达到CI容器上的内存限制,并且正在终止Gradle进程 解决方案:这是一个设置环境变量的简单问题:
GRADLE\u OPTS=-Dkotlin.compiler.execution.strategy=进程内
有了这个变量,Kotlin编译在Gradle JVM中内联运行,因此当Gradle继续运行测试时,它的数据可以被垃圾收集
将选项传递给
gradle
命令也可以,而不是在环境中设置它。本例中的罪魁祸首是Kotlin编译器
默认情况下,Kotlin编译器在后台生成守护进程,以便后续编译作业更快。对于非平凡大小的Kotlin代码库,此过程最终可能消耗大量内存
它的存在导致Gradle达到CI容器上的内存限制,并且正在终止Gradle进程
解决方案:这是一个设置环境变量的简单问题:
GRADLE\u OPTS=-Dkotlin.compiler.execution.strategy=进程内
有了这个变量,Kotlin编译在Gradle JVM中内联运行,因此当Gradle继续运行测试时,它的数据可以被垃圾收集
将该选项传递给
gradle
命令,而不是在环境中设置它也会起作用。我与gradle团队进行了交谈。他们建议使用默认的守护进程。基本上,kotlin编译器将在其自己的守护进程中运行,这将通过kotlin编译器特定的预热节省大量时间。您可以使用-Dkotlin.daemon.jvm.options=-Xmx6g增加编译器守护进程的内存。下面的文章我和gradle团队谈过。他们建议使用默认的守护进程。基本上,kotlin编译器将在其自己的守护进程中运行,这将通过kotlin编译器特定的预热节省大量时间。您可以使用-Dkotlin.daemon.jvm.options=-Xmx6g增加编译器守护进程的内存。下文