DAEMON_EXPIRATION cicd system_error ai_generated true

Gradle守护进程将在构建结束后停止,因为已运行X小时且未使用Y小时

org.gradle.launcher.daemon.server.DaemonExpirationPeriodicCheck: Daemon will be stopped at the end of the build after running for X hours and not being used for Y hours

ID: cicd/gradle-daemon-stopped-after-build

其他格式: JSON · Markdown 中文 · English
85%修复率
88%置信度
1证据数
2023-11-15首次发现

根因分析

Gradle守护进程在CI构建期间达到空闲超时(默认3小时)或最大存活时间(默认24小时),导致被提前停止,如果后续任务需要该守护进程,可能导致构建失败。

English

Gradle daemon reaches its idle timeout (default 3 hours) or maximum age (default 24 hours) during a CI build, causing it to be stopped prematurely, which can lead to build failures if the daemon is needed for subsequent tasks.

generic

官方文档

https://docs.gradle.org/current/userguide/gradle_daemon.html

解决方案

  1. Set org.gradle.daemon.idletimeout=7200000 in gradle.properties to increase idle timeout to 2 hours (value in milliseconds). Also set org.gradle.daemon.registrybase=/tmp/gradle-daemon to avoid PID file conflicts in CI.
  2. Run Gradle with --no-daemon flag in CI scripts to avoid daemon lifecycle issues altogether: ./gradlew build --no-daemon

无效尝试

常见但无效的做法:

  1. Set org.gradle.daemon=false in gradle.properties to disable daemon entirely 20% 失败

    Disabling daemon forces a new JVM for each build, increasing startup time and memory overhead, and may cause other race conditions in CI pipelines.

  2. Increase max heap size for daemon (org.gradle.jvmargs=-Xmx4g) to avoid memory pressure 80% 失败

    Heap size does not affect idle timeout; the daemon is stopped based on time, not memory usage, so this fix is irrelevant.