博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Gradle构建卡住问题解决
阅读量:6278 次
发布时间:2019-06-22

本文共 1341 字,大约阅读时间需要 4 分钟。

hot3.png

Gradle构建卡住问题解决

项目描述

项目代码量30W+,测试用例数1K+。有三个测试环境:黑盒环境,白盒环境,构建环境,预发布环境。

问题描述

项目一直使用Gradle进行构建(编译代码,执行测试用例,统计测试覆盖率,静态代码检查,打包等),之前一直没有问题。最近一次需求迭代完成之后像往常一样进行项目构建打包准备上线。但是在执行构建过程中老是卡在某个地方,遇到了各种异常情况。记录下来给有需要的人参考。

异常解决

遇到这种情况我们一般会启用Gradle的DEBUG模式,通过日志信息,排查问题。下面是遇到的一些问题:

  1. 执行构建一直卡在第一个测试用例的第一个测试方法不动

    问题解决:

    卡住不动从代码层面考虑的话一定是什么东西阻塞了代码的执行。观察日志发现测试用例在进行数据初始化的时候一直卡住不动。数据库阻塞了测试用例执行。

    查看构建库,发现来自同一个会话出现了很多锁,执行了什么导致了这么多锁呢?应是前面反复多次执行构建时,一直卡住把进程杀掉导致的。手动把数据库里的锁清理掉后。再次执行构建。

  2. 执行到某个测试用例时就又失败了,当前执行的测试方法提示initialize error然后就卡住很长时间不动了

    问题解决:

    祭出debug大刀,再跑一次,查看日志,发现抛出 java.lang.OutOfMemoryError: PermGen space. 内存非堆内存溢出了。这就好办啦。设置一下JVM参数就行了。于是在项目的gradle.properties文件里增加以下配置:

    -XX:MaxPermSize=256m

    OK,这次应该可以了吧,再次构建项目。

    喝杯茶,等待执行结果······

    我擦还是initialize error,非堆内存还不够?好吧,在增大一倍试试,配置如下:

    -XX:MaxPermSize=256m

    再次构建项目,等待中······

    Oh,no,还是initialize error,不应该啊,这次迭代没有增加多少测试用例和类啊,上个迭代还正常怎么这次就突然不行了呢,异常日志还是相同的**java.lang.OutOfMemoryError: PermGen space.**异常啊。这是怎么回事儿啊?

    难道JVM设置没有起作用?那来看一下吧,在本地启动项目构建任务,然后打开jvisualvm查看JVM信息。发现刚开始只有一个GradleDaemon的JVM,执行到test的时候出现GradleWorkerMain的JVM,怎么会有两个JVM呢?查看官方文档发现原来test任务会使用一个独立的JVM执行测试任务。前面的设置只是对GradleDaemon起作用。根据官方文档在test任务中加入以下配置:

    test {    jvmArgs "-XX:MaxPermSize=1024m"}

    官方说明文档地址:

    再次执行构建,等待中······

    终于成功了。

  3. 中间还有很多坎坷基本上使用DEBUG模式都可以根据提示信息轻松解决,比如测试引入新的测试库,在构建环境没有同步,测试用例存在环境依赖等等。

总结

路漫漫兮其修远兮吾将上下而求索。

转载于:https://my.oschina.net/intellitor/blog/1803063

你可能感兴趣的文章
SAP S/4HANA Cloud: Revolutionizing the Next Generation of Cloud ERP
查看>>
Mellanox公司计划利用系统芯片提升存储产品速度
查看>>
白帽子守护网络安全,高薪酬成大学生就业首选!
查看>>
ARM想将芯片装进人类大脑 降低能耗是一大挑战
查看>>
Oracle数据库的备份方法
查看>>
Selenium 自动登录考勤系统
查看>>
关于如何以编程的方式执行TestNG
查看>>
智能照明造福千家万户 家居智能不再是梦
查看>>
物联网如何跳出“看起来很美”?
查看>>
浅谈MySQL 数据库性能优化
查看>>
《UNIX/Linux 系统管理技术手册(第四版)》——1.10 其他的权威文档
查看>>
灵动空间 创享生活
查看>>
《UNIX网络编程 卷1:套接字联网API(第3版)》——8.6 UDP回射客户程序:dg_cli函数...
查看>>
不要将时间浪费到编写完美代码上
查看>>
《第一桶金怎么赚——淘宝开店创业致富一册通》一一第1章 创业梦想,怎样起步...
查看>>
基于容器服务的持续集成与云端交付(三)- 从零搭建持续交付系统
查看>>
《算法基础:打开算法之门》一3.4 归并排序
查看>>
高德开放平台开放源代码 鼓励开发者创新
查看>>
《高并发Oracle数据库系统的架构与设计》一2.5 索引维护
查看>>
《Exchange Server 2010 SP1/SP2管理实践》——2.4 部署外部网络环境
查看>>