【发布时间】:2016-12-02 19:51:54
【问题描述】:
我们最近遇到了一个问题,即我们的 EC2 实例有 90-100% 的 cpu 负载,这是因为我们包含一个库中的一个错误,该库为许多对象创建而不是重用它们(这很容易解决),所以我们花了太多时间在 GC 中。
不幸的是,AWS 运行状况检查和实例状态指标并没有导致过载的实例停止,然后新的实例重新启动,所以一段时间后我们达到了最大自动缩放数量并且......死了。此外,我们自己在应用程序中用于 ELB 的运行状况检查非常简单,以至于它们回答的频率足够高,显然不会导致实例被终止......并重新启动,这将在相当长的一段时间内缓解该问题。
我现在的想法是,如果我们在 GC 上花费了太多时间,则使用我们已经包含在 ELB 健康检查中的自定义健康检查来报告失败。
我将如何在应用程序内做这样的事情?
【问题讨论】:
-
所有不错的建议,但我不想通过工具连接,而是从应用程序内部报告它,例如通过 Http 调用。所以我也想从内部计算它......
-
GCTimeRatio实际上应该防止这种情况发生,并在花费太多时间在 GC 上时抛出超出 OOME 的开销限制。 -
我们的应用并非如此。它仍然有响应,但还不够好。对于 3 个实例,我们每分钟大约有 5000 到 20000 个请求
-
默认情况下,取决于配置,大约 1% 到 15% 的 GC 开销。除非您覆盖了一些相关的 JVM 参数,否则我希望会发生 OOME。
标签: amazon-web-services garbage-collection jvm amazon-elb autoscaling