返回

飞书 Android 升级 JDK 11 引发 CI 构建性能问题:分析和解决

Android

升级 JDK 11 对 Android CI 构建性能的影响

在 Android 开发中,CI(持续集成)系统对于确保代码质量和快速交付至关重要。近日,飞书 Android 团队在升级 JDK(Java 开发工具包)至 11 时,遭遇了 CI 构建性能下降的问题。本文将深入探讨这一问题,分享我们的原因分析和解决方法,为其他计划升级 JDK 的团队提供参考。

性能下降的现象

升级 JDK 11 后,飞书 Android 团队的 CI 构建时间显著延长:

  • 编译阶段耗时从 15 分钟延长至 30 分钟以上。
  • 单元测试阶段耗时从 10 分钟延长至 20 分钟以上。
  • 整体 CI 构建时间从 1 小时增加至 1 小时 30 分钟以上。

这种性能下降严重影响了开发效率和 CI 系统的稳定性。

原因分析

为找出性能下降的原因,我们从以下方面进行了分析:

JVM 性能: JDK 11 引入新的 G1 垃圾回收器,在某些情况下可能导致性能下降。分析 JVM 日志发现,G1 垃圾回收器的暂停时间过长,导致编译和测试阶段卡顿。

Gradle 配置: 升级 JDK 11 后,Gradle 默认开启增量编译功能。但在我们的项目中,增量编译并未带来显著提升,反而增加了构建时间。

第三方库兼容性: 升级 JDK 可能导致第三方库出现兼容性问题。Gradle 构建日志显示,某些依赖库在 JDK 11 下出现异常或性能问题。

解决方法

针对分析结果,我们采取了以下解决措施:

调整 JVM 参数: 调整 JVM 参数优化 G1 垃圾回收器性能。具体而言,增加了堆内存大小并调整垃圾回收器参数,减少垃圾回收暂停时间。

禁用增量编译: 禁用 Gradle 中的增量编译功能。在我们的项目中,增量编译并未带来显著提升,反而增加了构建时间。

更新第三方库: 更新出现兼容性问题的第三方库。通过升级或更换这些库,解决了因 JDK 11 导致的异常和性能问题。

性能提升

经过以上优化后,CI 构建性能得到明显提升:

  • 编译阶段耗时减少至 18 分钟。
  • 单元测试阶段耗时减少至 12 分钟。
  • 整体 CI 构建时间减少至 1 小时。

这些优化措施不仅解决了 JDK 11 升级带来的性能问题,还提升了 CI 系统的整体稳定性和效率。

总结

升级 JDK 11 可能对 CI 构建性能产生影响。通过深入分析 JVM、Gradle 和第三方库,我们可以找出性能下降的原因并制定针对性的解决措施。在我们的案例中,调整 JVM 参数、禁用增量编译和更新第三方库有效地提升了 CI 构建性能。

希望本文的分析和解决方法能为其他计划升级 JDK 的团队提供参考,帮助他们避免或解决类似的性能问题。

常见问题解答

Q1:为什么升级 JDK 11 会导致 CI 构建性能下降?

A1:升级 JDK 11 可能引入新的 JVM 垃圾回收器(G1)、Gradle 配置(增量编译)和第三方库兼容性问题,这些因素可能会导致性能下降。

Q2:如何优化 G1 垃圾回收器以提高 CI 构建性能?

A2:可以通过调整 JVM 参数,例如增加堆内存大小和调整垃圾回收器参数,来优化 G1 垃圾回收器。

Q3:禁用增量编译是否会影响编译质量?

A3:禁用增量编译不会影响编译质量。在某些情况下,禁用增量编译甚至可以提高构建性能。

Q4:如何识别出现兼容性问题的第三方库?

A4:分析 Gradle 构建日志可以识别因 JDK 11 升级而出现异常或性能问题的第三方库。

Q5:升级 JDK 11 后如何确保 CI 系统的稳定性?

A5:升级 JDK 11 后,应全面测试 CI 构建并优化 JVM、Gradle 和第三方库配置,以确保 CI 系统的稳定性。