在你的应用程序上启用垃圾收集日志具有一定的优势。简而言之,垃圾收集日志将帮助你优化垃圾收集暂停时间,提高整体应用程序的响应时间,预测生产中断,降低计算成本。尽管垃圾收集日志具有这些优势,但我们不确定垃圾收集日志会给应用程序增加什么开销。因此,我们着手进行以下案例研究。
环境
对于我们的研究,我们选择使用开源spring boot pet Clinic 应用程序。Pet Clinic 是一个典型的应用程序,旨在展示 spring boot 框架的功能。
我们在 OpenJDK 11 中运行此应用程序。我们将此应用程序部署在 Amazon AWS t2.medium EC2 实例上,该实例具有 16GB RAM 和 2 个 CPU。测试是使用 Apache JMeter 压力测试工具编排的。我们使用 AWS Cloudwatch 来衡量 CPU、内存利用率。简而言之,这里是我们用来进行此案例研究的工具/技术:
- OpenJDK 11
- AWS EC2
- AWS 云观察
- Apache JMeter
测试场景
在这个环境中,我们进行了2个测试:
- 基线测试——在这个场景中,我们使用 JMeter 工具运行宠物诊所应用程序 20 分钟,但没有启用垃圾收集 (GC) 日志,有 200 个并发用户
- GC 日志启用测试 –在此场景中,我们使用相同的 JMeter 脚本运行宠物诊所应用程序并启用垃圾收集 (GC) 日志 20 分钟,同时有 200 个并发用户。
注意:如果您不知道如何启用 GC 日志,请参阅这篇文章:'如何启用 GC 日志?'
检测结果
我们从 AWS Cloudwatch 获取平均 CPU 和内存利用率,从 JMeter 工具获取平均响应时间和吞吐量。从这两种情况收集的数据总结在下表中。
收集的数据 | 基线 测试 | 启用 GC 测试 |
平均 CPU 使用率 | 8.35% | 10.10% |
平均内存使用量 | 20.80% | 20.50% |
平均响应时间 | 3901 毫秒 | 3881 毫秒 |
平均吞吐量 | 24.4/秒 | 24.5/秒 |
如您所见,CPU 和内存消耗没有明显差异。同样,平均响应和事务吞吐量也没有明显差异。
结论
因此,根据我们的研究,我们可以得出结论,启用垃圾收集日志文件没有明显的开销。鉴于我们通过启用垃圾收集日志获得的好处,您可以考虑在所有生产实例上启用 GC 日志记录。