Плагин Eclipse Gradle, порождающий сотни процессов

Когда я запускаю Eclipse с включенным плагином Gradle, иногда буквально сотни процессов Java внезапно появляются. Они выглядят так:

26000 pts / 24 Sl 0:01 / usr / lib / jvm / default-java // bin / java -Dfile.encoding = utf-8 -Xmx512m -XX: MaxPermSize = 128m -XX: + UseG1GC -Dorg.gradle.appname = gradlew -classpath /[...]/gradle/wrapper/gradle-wrapper.jar org.gradle.wrapper.GradleWrapperMain [имя проекта]: eclipseExternalBuild --configure-on-demand -Dorg.gradle.parallel = false

26230 pts / 24 Sl 0:04 /usr/lib/jvm/jdk1.7.0_51/bin/java -XX: MaxPermSize = 2048m -Xmx4096m -Dfile.encoding=UTF-8 -cp [...] /. Gradle / обертка /dists/gradle-1.8-all/2kopnp0i5dq014k75fp36m3vd5/gradle-1.8/lib/gradle-launcher-1.8.jar org.gradle.launcher.daemon.bootstrap.GradleDaemon 1.8 [...]/.gradle/daemon 10891 4 4001000 c332-4714-b0cd-1e80bc6dd78f -XX:MaxPermSize=2048 м -Xmx4096 м -Dfile.encoding=UTF-8

Первый тип процесса выглядит так, как будто Eclipse строит вещи; Кажется, что есть хотя бы один (иногда до 6!!) процесс для каждого проекта в моей рабочей области. Они уходят через несколько минут, что разумно.

Что раздражает то, что я понятия не имею, что все GradleDaemons делают.

В Eclipse включено управление зависимостями Gradle. Я использую Eclipse 4.4 и Gradle 1.8 на Ubuntu 14.04.

Как это исправить? Я в основном звоню killall -9 java каждые несколько часов, когда мой компьютер перестает отвечать на запросы.

1 ответ

Я не знаю, смогу ли я решить эту проблему для вас, но, по крайней мере, я могу дать вам рекомендации по некоторым вопросам здесь. Первый набор процессов-демонов после запуска Eclipse создается для получения модели проекта для заполнения пути к классам ваших проектов. У них, вероятно, будет короткий тайм-аут, если они умрут быстро.

Процесс 26000 для меня больше напоминает вызов командной строки, чем процесс, инициированный плагином Eclipse. Два последовательных слеша в /usr/lib/jvm/default-java//bin/java кажется странным для меня. У вас есть JAVA_HOME с косой чертой?

Если у вас одновременно запущено столько процессов, то каждый запрос на сборку, вероятно, запускает новый с 3-часовым таймаутом (параметр 10800000 миллисекунд в выходных данных). Вы можете настроить время ожидания, используя системное свойство, но было бы лучше выяснить, почему Gradle не использует повторно уже запущенный процесс демона. Он должен делать это, предполагая, что демон использует ту же JVM, тот же набор аргументов JVM и, возможно, некоторые другие ограничения. В домашнем каталоге пользователя Gradle есть журналы, которые вы можете проверить на наличие подозрительных сообщений.

Также я бы проверил некоторые из этих процессов, используя дамп потока, чтобы увидеть, есть ли тупик / голодание, препятствующее нормальной обработке. Т.е., если они не завершат выполнение сборки, они не будут повторно использованы для следующего запроса на сборку и, возможно, они не завершат работу после истечения времени ожидания.

Другие вопросы по тегам