在应用程序中启用垃圾回收日志功能确实具有某些优点。简而言之,垃圾回收日志有助于优化 GC 停顿时间,提高应用程序的整体响应时间,还有助于预测生产中断情形并降低计算成本。不过,尽管垃圾回收日志功能具有以上优点,但我们仍然不确定其会在应用程序运行的过程中带来何种开销方面的增加。所以我们便着手进行了以下案例研究。
环境
对于本次研究,我们选择使用一款开源的 Spring Boot PetClinic 应用程序。PetClinic 是一款展示用的儿童应用程序,旨在演示 Spring Boot 框架的功能。
研究中程序的运行环境为 OpenJDK 11。我们在 Amazon AWS t2.medium EC2 实例(具有 16GB RAM 和双核 CPU)上部署了此应用程序。测试过程则使用了 Apache JMeter 的压力测试工具。然后采用了 AWS Cloudwatch 来对 CPU 和内存使用情况进行测量。总结一下,我们在进行本次案例研究的过程中涉及了以下工具和技术:
- OpenJDK 11
- AWS EC2
- AWS Cloudwatch
- Apache JMeter
测试场景
我们进行了 2 项测试:
- 基线测试 – 在此情形中,我们仅运行应用程序,而不启用垃圾回收(GC)日志功能,同时使用 JMeter 工具在 20 分钟内模拟 200 个并发用户的情况
- GC 日志功能启用测试 – 此情形中,我们会在启用垃圾回收(GC)日志的前提下运行 PetClinic 应用程序,同时使用相同的 JMeter 脚本持续测试 20 分钟,并发用户依然为 200。
备注:如果你不知道如何启用 GC 日志功能,请参考以下文章 – “如何启用 GC 日志功能?”
测试结果
我们从 AWS Cloudwatch 中获得了平均 CPU 和内存利用率数据,并通过 JMeter 工具得到了程序的平均响应时间和吞吐量信息。下表汇总了从上述两种情形中收集的数据。
收集的数据 | 基线测试 | GC 启用测试 |
平均 CPU 使用率 | 8.35% | 10.10% |
平均内存使用率 | 20.80% | 20.50% |
平均响应时间 | 3901 ms | 3881 ms |
平均吞吐量 | 24.4/秒 | 24.5/秒 |
可以看到,CPU 和内存的使用情况并没有明显差异。同样,平均响应时间和事务吞吐量也没有明显差异。
结论
因此,根据案例研究我们可以得出结论,启用垃圾回收日志功能没有带来明显的开销增加。考虑到其所带来的好处,你可以尝试在所有生产实例上启用 GC 日志记录功能。
Leave a Reply