Почему моя сборка Kotlin Gradle умирает с кодом выхода 137? - PullRequest
0 голосов
/ 02 мая 2018

Мы наблюдали загадочные сбои в нашей среде CI при выполнении тестов базы кода Kotlin.

gradle test скомпилировал код и тесты просто отлично. Испытания прошли, и все, казалось, прошло. Но затем Gradle завершил работу с кодом 137 (указывая на то, что он был убит SIGKILL), и система CI решила, что сборка не удалась.

Ограничение размера JVM для Gradle не помогло. Также не были --no-daemon и --max-workers параметры.

Это использует Kotlin 1.2.40 и Gradle 4.3 на Java 8 JVM.

1 Ответ

0 голосов
/ 02 мая 2018

Виновником в этом случае оказался компилятор Kotlin.

По умолчанию компилятор Kotlin порождает демона в фоновом режиме, чтобы последующие задания компиляции выполнялись быстрее. Для нетривиальной базы кода Kotlin этот процесс может потребовать значительного объема памяти.

Его присутствие заставляло Gradle достигать предела памяти в контейнере CI, а Linux OOM killer убивал процесс Gradle.

Решение: Скажите компилятору Kotlin не запускать фоновый процесс. Оказывается, это просто вопрос установки переменной окружения:

GRADLE_OPTS=-Dkotlin.compiler.execution.strategy=in-process

При наличии этой переменной компиляция Kotlin выполняется в JVM Gradle, и поэтому ее данные можно собирать, когда Gradle переходит к выполнению тестов.

Было бы также лучше передать параметр команде gradle, а не устанавливать его в среде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...