递归和内存泛滥:启动Gradle守护进程,1个繁忙和6个停止的守护进程无法重复使用,请使用--status以获取详细信息。

7
我正在使用这个插件https://github.com/mozilla/rust-android-gradle,需要我添加一些内容。
tasks.whenTaskAdded { task ->
    if ((task.name == 'javaPreCompileDebug' || task.name == 'javaPreCompileRelease')) {
        task.dependsOn 'cargoBuild'
    }
}

在我的Flutter项目构建中,Gradle问题较多,当我执行`flutter build`时,会出现类似以下提示:

Starting a Gradle Daemon, 18 busy Daemons could not be reused, use --status for details
Starting a Gradle Daemon, 19 busy Daemons could not be reused, use --status for details
...

然后它会不断启动新的程序,直到我的内存耗尽并导致计算机崩溃。如果我注释掉那段代码,它就可以构建。

有没有办法进行更多调试以查看发生了什么?查看系统监视器,它正在启动大量的Java Gradle守护进程。

这是./gradlew --info --stack trace --debug assembleDebug的部分输出内容。

2022-04-24T17:14:45.981+0000 [QUIET] [system.out] > Configure project :
2022-04-24T17:14:45.981+0000 [QUIET] [system.out] Starting a Gradle Daemon, 2 busy and 23 stopped Daemons could not be reused, use --status for details
2022-04-24T17:14:51.958+0000 [LIFECYCLE] [org.gradle.cache.internal.DefaultFileLockManager] 
2022-04-24T17:14:51.958+0000 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Waiting to acquire shared lock on daemon addresses registry.
2022-04-24T17:14:51.958+0000 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Lock acquired on daemon addresses registry.
2022-04-24T17:14:51.958+0000 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on daemon addresses registry.
2022-04-24T17:14:51.958+0000 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Waiting to acquire shared lock on daemon addresses registry.
2022-04-24T17:14:51.958+0000 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Lock acquired on daemon addresses registry.
2022-04-24T17:14:51.958+0000 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on daemon addresses registry.
2022-04-24T17:14:46.015+0000 [LIFECYCLE] [org.gradle.internal.logging.progress.ProgressLoggerFactory] 
2022-04-24T17:14:46.015+0000 [LIFECYCLE] [org.gradle.internal.logging.progress.ProgressLoggerFactory] > Configure project :
2022-04-24T17:14:54.279+0000 [QUIET] [system.out] 
2022-04-24T17:14:54.279+0000 [QUIET] [system.out] > Configure project :
2022-04-24T17:14:54.279+0000 [QUIET] [system.out] Starting a Gradle Daemon, 3 busy and 23 stopped Daemons could not be reused, use --status for details
2022-04-24T17:15:01.958+0000 [LIFECYCLE] [org.gradle.cache.internal.DefaultFileLockManager] 
2022-04-24T17:15:01.958+0000 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Waiting to acquire shared lock on daemon addresses registry.
2022-04-24T17:15:01.958+0000 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Lock acquired on daemon addresses registry.
2022-04-24T17:15:01.958+0000 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on daemon addresses registry.
2022-04-24T17:15:01.959+0000 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Waiting to acquire shared lock on daemon addresses registry.
2022-04-24T17:15:01.959+0000 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Lock acquired on daemon addresses registry.
2022-04-24T17:15:01.959+0000 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on daemon addresses registry.
2022-04-24T17:14:54.315+0000 [LIFECYCLE] [org.gradle.internal.logging.progress.ProgressLoggerFactory] 
2022-04-24T17:14:54.315+0000 [LIFECYCLE] [org.gradle.internal.logging.progress.ProgressLoggerFactory] > Configure project :
2022-04-24T17:15:02.379+0000 [QUIET] [system.out] 
2022-04-24T17:15:02.379+0000 [QUIET] [system.out] > Configure project :
2022-04-24T17:15:02.379+0000 [QUIET] [system.out] Starting a Gradle Daemon, 4 busy and 23 stopped Daemons could not be reused, use --status for details
2022-04-24T17:15:10.279+0000 [QUIET] [system.out] 
2022-04-24T17:15:10.279+0000 [QUIET] [system.out] > Configure project :
2022-04-24T17:15:10.279+0000 [QUIET] [system.out] Starting a Gradle Daemon, 5 busy and 23 stopped Daemons could not be reused, use --status for details

我的 build.gradle

buildscript {
    ext.kotlin_version = '1.6.21'
    repositories {
        google()
        mavenCentral()
        maven {
            url "https://plugins.gradle.org/m2/"
        }
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:4.1.0'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath 'org.mozilla.rust-android-gradle:plugin:0.9.2'
    }

Gradle 版本:

distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-all.zip

更新:

 ./gradlew --status
   PID STATUS   INFO
   671 IDLE     7.4.2
  1026 IDLE     7.4.2
  1320 IDLE     7.4.2
  2128 IDLE     7.4.2
  2470 IDLE     7.4.2
  2760 IDLE     7.4.2
  3035 IDLE     7.4.2

Only Daemons for the current Gradle version are displayed. See https://docs.gradle.org/7.4.2/userguide/gradle_daemon.html#sec:status

更新:

java --version
openjdk 11.0.14.1 2022-02-08
OpenJDK Runtime Environment (build 11.0.14.1+1-Ubuntu-0ubuntu1.20.04)
OpenJDK 64-Bit Server VM (build 11.0.14.1+1-Ubuntu-0ubuntu1.20.04, mixed mode, sharing)

更新:

flutter --version
Flutter 2.10.5 • channel stable •
https://github.com/flutter/flutter.git
Framework • revision 5464c5bac7 (10 days ago) •
2022-04-18 09:55:37 -0700
Engine • revision 57d3bac3dd
Tools • Dart 2.16.2 • DevTools 2.9.2

更新:

./gradlew --status
   PID STATUS   INFO
  7625 IDLE     7.4.2
   694 STOPPED  (after the daemon registry became unreadable)
   977 STOPPED  (after the daemon was no longer found in the daemon registry)
  6270 STOPPED  (other compatible daemons were started after being idle for 0 minutes and not recently used)
  5976 STOPPED  (other compatible daemons were started after being idle for 0 minutes and not recently used)
  5689 STOPPED  (other compatible daemons were started after being idle for 0 minutes and not recently used)
  6548 STOPPED  (other compatible daemons were started after being idle for 0 minutes and not recently used)

Only Daemons for the current Gradle version are displayed. See https://docs.gradle.org/7.4.2/userguide/gradle_daemon.html#sec:status

建议使用 ./gradlew --status 命令会得到什么结果? - cyberbrain
你好,请问您能否提供您的Java和React版本号? - jacouille
你是否使用了--status参数来获取详细信息? - Oleg Ushakov
@cyberbrain 已更新 - Guerlando OCs
@jacouille 已更新,且它是 Flutter。 - Guerlando OCs
显示剩余7条评论
2个回答

3

假设这不是本地防火墙问题。

文件$GRADLE_USER_HOME/gradle.properties定义了行为。

可以通过以下方法阻止它重新启动守护进程(原因可能是插件而不是守护进程):

org.gradle.daemon.performance.enable-monitoring=false

或者可以完全禁用守护进程:

org.gradle.daemon=false

按照 手册 建议,更好地运行,请使用开关 --no-daemon 运行第一次:

如果怀疑守护进程(Daemon)已经不稳定,可以直接终止它。请记住,在构建过程中指定开关 --no-daemon 可以防止使用守护进程(Daemon)。这对于诊断守护进程是否是问题的罪魁祸首非常有用。


1
创建Gradle守护进程陷入无限循环的问题似乎是连接问题,即守护进程无法连接或连接速度缓慢被视为死亡状态 - 因此会创建一个新的守护进程遇到相同的问题,如此往复,直到系统资源耗尽。
在stackoverflow上找到了这个,甚至更有趣的是这个,因为它与flutter相关。那里描述的解决方法是关闭共享WiFi连接/使用系统作为热点。

希望Martin的答案能有所帮助。我也会尝试在我的Jenkins构建中设置org.gradle.daemon=false,因为我经常遇到一些死掉的守护进程(但只有大约5或6个)。 - jausen brett
很遗憾,不行。 - Guerlando OCs
禁用移动热点对我有用! - lastant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接