gradle --status 显示当前活跃的 daemon 进程列表,包括启动时间、gradle 版本、jvm 参数和空闲时长;输出为空表示 daemon 未启用或已被停止,有记录但标“idle”超3小时则即将自动销毁。

gradle --status 能看到什么
直接运行 gradle --status 就能看到当前所有活跃的 Daemon 进程列表,包括启动时间、Gradle 版本、JVM 参数和空闲时长。它不显示进程 PID 或内存占用细节,但足够判断 daemon 是否在跑、有没有被意外杀掉、多个版本是否共存。
常见现象:输出为空,或只有 “No Gradle daemons are running” —— 说明 daemon 没启用,或者刚被 gradle --stop 干掉了;输出里有几行记录,但其中一行标着 “IDLE for 3h 2m”,那它下一秒就可能自动退出(默认闲置超 3 小时会销毁)。
为什么 gradle --status 有时查不到 daemon
不是命令失效,而是 daemon 根本没起来,或 client 拒绝连接。几个典型原因:
-
gradle.properties里写了org.gradle.daemon=false,强制禁用 - 执行命令时加了
--no-daemon参数(比如 CI 脚本里残留的) - JVM 配置变了(如
org.gradle.jvmargs增加了新参数),client 会认为旧 daemon 不兼容,直接启新的——但新 daemon 启动失败(比如堆内存设太高,机器扛不住),结果就是“查无此 daemon” - 项目用了不同 Gradle 版本(比如根项目用 8.7,某个子模块硬指定 7.4),各自 spawn 独立 daemon,
--status全部列出,但你只关心其中一个
怎么确认当前构建到底用没用 daemon
最靠谱的方式不是看状态,而是看构建日志第一行:
- 如果出现
Starting daemon process...或Starting a Gradle Daemon (subsequent builds will be faster),说明这次是冷启动,daemon 正在拉起 - 如果第一行是
Using daemon with pid:后跟一串数字,说明复用了已有 daemon - 加
-d(debug 模式)后,日志里会出现Connected to daemon或Daemon was not found这类明确通信状态提示
注意:gradlew 默认启用 daemon,但如果你在 IDE 里点 “Build”,得去设置里确认是否勾选了 “Use Gradle from wrapper” 和 “Run tests using Gradle”,否则可能走 IDE 自带的 Gradle 实例,绕过本地 daemon。
daemon 状态异常时该查哪几个文件
当 gradle --status 显示有 daemon,但构建还是慢得离谱,优先检查:
-
~/.gradle/daemon/<version>/</version>目录下的daemon*.out和daemon*.log—— 看是否有 OOM、ClassNotFoundException 或插件加载失败 -
gradle.properties中的org.gradle.jvmargs是否设置了过小的堆(如-Xmx512m),导致 daemon 频繁 GC 甚至崩溃重启 -
~/.gradle/daemon/下是否存在大量以版本号命名的空目录 —— 表明 daemon 频繁新建又退出,大概率是 JVM 参数不一致或磁盘空间不足
真正容易被忽略的是:daemon 进程本身不报错,但它的缓存(比如 .gradle/caches/)被外部工具清空过,或者 buildSrc 里用了动态生成脚本,每次构建都触发重新编译 —— 这些问题 --status 完全不体现,得结合 --scan 或构建耗时统计才能定位。











