当我在打开 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 [project name]: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 个!!)进程。几分钟后他们就会离开,这是合理的。
令人烦恼的是我不知道所有 GradleDaemon
正在做什么。
Gradle 依赖管理在 Eclipse 中启用。我在 Ubuntu 14.04 上使用 Eclipse 4.4 和 Gradle 1.8。
我该如何解决这个问题?当我的计算机开始无响应时,我基本上每隔几个小时就会调用 killall -9 java
。
最佳答案
我不知道是否可以为您解决问题,但至少我可以在这里为您提供一些指导。 Eclipse 启动后创建第一组守护进程,用于获取项目模型以填充项目的类路径。如果他们死得很快,他们可能会有一些短暂的超时。
对我来说,进程 26000 看起来更像是一个命令行调用,而不是由 Eclipse 插件启动的进程。 /usr/lib/jvm/default-java//bin/java
中的两个连续斜杠对我来说似乎很奇怪。您是否设置了带有尾部斜杠的 JAVA_HOME?
如果同时运行如此多的进程,则每个构建请求可能会启动一个新的进程,超时时间为 3 小时(输出中的 10800000 毫秒参数)。您可以使用系统属性自定义超时,但最好找出 Gradle 不重用已运行的守护进程的原因。它应该假设守护进程使用相同的 JVM、相同的 JVM 参数集以及可能的其他一些约束来执行此操作。 Gradle 用户主目录中有日志,您可以检查是否有任何可疑消息。
此外,我会使用线程转储检查其中一些进程,以查看是否存在死锁/饥饿阻止其正常处理。 IE。如果它们没有完成构建执行,它们将不会被重用于下一个构建请求,并且可能在超时后不会退出。
关于java - Eclipse Gradle 插件生成数百个进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26517419/