临近上线,Jenkins突然build不通过了,本地build没有问题,在Linux 服务器上构建时,
使用命令 ./gradlew assembleXxRelease --stacktrace 出现以下错误
org.gradle.launcher.daemon.client.DaemonDisappearedException: Gradle build daemon disappeared unexpectedly (it may have been killed or may have crashed)
at org.gradle.launcher.daemon.client.DaemonClient.handleDaemonDisappearance(DaemonClient.java:238)
at org.gradle.launcher.daemon.client.DaemonClient.monitorBuild(DaemonClient.java:214)
at org.gradle.launcher.daemon.client.DaemonClient.executeBuild(DaemonClient.java:178)
at org.gradle.launcher.daemon.client.SingleUseDaemonClient.execute(SingleUseDaemonClient.java:54)
at org.gradle.launcher.daemon.client.SingleUseDaemonClient.execute(SingleUseDaemonClient.java:36)
at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:51)
at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:173)
at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:291)
at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:264)
at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:33)
at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:24)
at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33)
at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22)
at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:257)
at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:191)
at org.gradle.launcher.Main.doAction(Main.java:33)
at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:60)
at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:37)
at org.gradle.launcher.GradleMain.main(GradleMain.java:23)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.gradle.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:33)
at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:130)
at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:48)
通过gradle文档(docs.gradle.org/current/use…)查询到 是守护进程意外终止,于是尝试了下面几个步骤排错。
第一步:
在/yourProject/gradle.properties 目录下添加两行命令
org.gradle.daemon=false
file.encoding=utf-8使用上面第一个命令可以永久的为环境禁用守护进程,没有守护进程 也许就不会出现守护进程意外停止的情况了
第二行命令 在搜索错误过程中有人说是因为project中提交了错误的中文字符,gradle不能识别,所以加上utf-8排除字符错误问题
为了双重保险,在build 的时候,又一次用命令去禁止守护进程
./gradlew --no-daemon assembleXxRelease --stacetrace结果仍抛出上述错误,在排查过程中发现jenkins build的次数很多,原以为是有同事不知情在一直打包,结果问了一圈发现并没有人在构建项目,于是去jenkins配置中查询

在构建触发器中发现竟然有个定时任务,还是5分钟执行一次的,赶紧关掉,赶紧关掉...
处理到上述步骤时,就在想会不会是其他任务与打包任务抢了资源,奈何linux服务器用的不是很熟,也考虑到之前运维同事提到过jenkins打包使用内存过多,服务器总共内存就8G,但我的gradle 最大内存也只配了4G,于是就尝试把内存降低一些试试,修改文件 /yourProject/gradle.properties 的内存配置
org.gradle.jvmargs=-Xmx1536m结果仍然报错,是由于在build.gradle中指定了进程内存为4G,我强制把内存修改小 报内存不匹配的错误

再次打包的过程中,在linux上使用命令 free -h 监控了下linux的运行情况

在未构建项目时,空闲内存3.3G,在构建失败前,监控到内存只剩100多m

到这基本可以确定就是由于gradle的进程内存不足导致的build失败的问题,周末的时候在这个服务器上搭建了一个maven仓库,在服务器上跑了一个service,手动将该service停止后,可用内存上升到4.1G,再次编译通过。