我正在CI环境中使用共享只读依赖项缓存运行Gradle构建。此依赖项缓存确实提高了CI构建的性能,但不如我所希望的那样。
当$GRADLE_HOME目录为空时,编译时间大约为2分钟。当$GRADLE_HOME目录预填充时,编译时间大约为30秒。注意,对于这些测试,我在运行编译任务之前停止了所有守护进程进程,因此守护进程执行的任何缓存都是无关紧要的。
我已将性能缓慢的原因缩小到两个文件:$GRADLE_HOME/caches/7.5.1/javaCompile/classAnalysis.bin
和$GRADLE_HOME/caches/7.5.1/javaCompile/jarAnalysis.bin
。当这些文件不存在时,编译需要2分钟。当它们存在时,编译需要30秒。
这些文件包含了什么,为什么它们会对编译时间产生如此大的影响?
其他可能有用的信息:
- 操作系统:Linux 2
- EC2示例类型:c5.xlarge
- Java版本:OpenJDK 64位服务器虚拟机Temurin-17.0.5+8
- Gradle版本:7.5.1
1条答案
按热度按时间nwlls2ji1#
Gradle主文件夹位于EBS卷上。我发现,当主文件夹位于EC2示例的本地存储上时,不会出现性能下降的情况。我将示例类型更改为
c6id.xlarge
,它具有基于NVMe的本地SSD块级存储。因此,我认为我的问题与EBS有关,而与Gradle本身无关。增加EBS卷的预配置IOPS和吞吐量没有帮助,因此在本地存储上运行Gradle似乎是解决方案。