DAEMON_EXPIRATION cicd system_error ai_generated true

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

Also available as: JSON · Markdown · 中文
85%Fix Rate
88%Confidence
1Evidence
2023-11-15First Seen

Root Cause

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

中文

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

Official Documentation

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

Workarounds

  1. 85% success 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.
    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. 90% success Run Gradle with --no-daemon flag in CI scripts to avoid daemon lifecycle issues altogether: ./gradlew build --no-daemon
    Run Gradle with --no-daemon flag in CI scripts to avoid daemon lifecycle issues altogether: ./gradlew build --no-daemon

中文步骤

  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

Dead Ends

Common approaches that don't work:

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

    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% fail

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