2

当我使用 Gradle 插件启动 Eclipse 时,有时会突然产生数百个 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/ wrapper/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 10800000 4d4119b1- c332-4714-b0cd-1e80bc6dd78f -XX:MaxPermSize=2048m -Xmx4096m -Dfile.encoding=UTF-8

第一种过程看起来像是 Eclipse 在构建东西;我的工作区中的每个项目似乎至少有一个(有时最多 6 个!!)进程。他们会在几分钟后离开,这是合理的。

令人讨厌的是,我不知道所有GradleDaemons 在做什么。

在 Eclipse 中启用了 Gradle 依赖项管理。我在 Ubuntu 14.04 上使用 Eclipse 4.4 和 Gradle 1.8。

我该如何解决?killall -9 java当我的计算机开始无响应时,我基本上每隔几个小时就会打电话一次。

4

1 回答 1

1

我不知道我是否可以为您解决问题,但至少我可以在这里为您提供一些指导。创建 Eclipse 启动后的第一组守护进程以获取项目模型以填充项目的类路径。如果他们很快死去,他们可能会有一些短暂的超时。

Process 26000 在我看来更像是一个命令行调用,而不是由 Eclipse 插件启动的进程。两个连续的斜线/usr/lib/jvm/default-java//bin/java对我来说似乎很奇怪。您是否设置了带有斜杠的 JAVA_HOME?

如果您有这么多进程同时运行,那么每个构建请求可能会以 3 小时超时(输出中的 10800000 毫秒参数)启动一个新的请求。您可以使用系统属性自定义超时,但最好找出 Gradle 没有重用已经运行的守护进程的原因。它应该假设守护进程使用相同的 JVM、相同的 JVM 参数集以及可能的其他一些约束。Gradle 用户主目录中有日志,您可以检查任何可疑消息。

此外,我会使用线程转储检查其中一些进程,以查看是否存在死锁/饥饿阻止它正常处理。即,如果他们没有完成构建执行,它们将不会被重用于下一个构建请求,并且可能在超时后不会退出。

于 2014-10-23T08:13:13.160 回答