为何要在Gradle中禁用守护进程?守护进程存在弊端吗?
为什么要用
gradle build --no-daemon?Gradle守护进程的那些坑 一、Docker里用守护纯纯浪费资源
Docker容器大多是用完就扔的一次性环境,构建完就停了或者销毁了。Gradle守护进程启动起来要占几百MB内存,但容器生命周期短得很,根本没机会复用这个进程,反而平白多占资源拖慢构建。而且容器是隔离的,每次构建都是全新环境,守护进程的缓存优势完全发挥不出来,还多了启动和退出的额外开销。
二、长期跑容易出内存泄漏或状态乱掉
守护进程会一直驻留在内存里,跑多了构建之后,很可能攒下内存泄漏的问题,后面构建越来越慢甚至直接内存溢出崩了。尤其是大型项目或者用了兼容性差的插件,这种情况更常见。另外,守护进程会存之前构建的状态,比如类加载器、缓存的依赖,如果换分支、改依赖或者调配置,可能出现状态不一致,导致构建失败或者结果不对,还得手动重启守护进程才能好。
三、CI/CD流水线要的是稳定一致
CI/CD环境最看重构建能不能每次都一样、可重复。守护进程的存在可能带来环境差异,比如上次构建残留的状态影响这次,导致同样的代码在不同CI运行里结果不一样,排查问题头都大。而且很多CI系统会限制单个任务的资源,守护进程占的额外内存可能直接触发资源超限,任务直接失败。
四、调试排查问题更省心
禁用守护进程后,构建就是单进程跑,日志清清楚楚,出问题了直接看当前进程的日志和状态就能定位。要是用守护进程,它是后台进程,日志分散,排查起来麻烦得多。对新手或者不太熟Gradle的人来说,少了守护进程这个环节,也能降低排查构建问题的门槛。
内容的提问来源于stack exchange,提问作者Sha
相关产品推荐
相关产品推荐

