我试图了解我的 AWS Elasticsearch 垃圾收集时间是否有问题,但我发现的所有与内存相关的问题都与内存压力有关,这似乎还不错。
因此,当我对环境运行负载测试时,我观察到所有 GC 收集时间指标不断增加,例如:
但是在查看内存压力时,我发现我没有通过 75% 标记(但接近......),根据文档,这将触发并发标记和扫描。
因此,我担心一旦添加更多负载或运行更长的测试,我可能会开始看到对我的环境产生影响的实际问题。那么,我这里有问题吗?当我无法进行内存转储并查看发生了什么时,我应该如何处理不断增加的 GC 时间?
我向 AWS 技术支持发送了查询,与任何直观行为相反,Elasticsearch 中的 Young 和 Old Collection 时间和计数的值是累积的。这意味着这个值不断增加并且不会下降到0值,直到出现节点丢失或节点重新启动
顶部图表报告聚合 GC 收集时间,可从 GarbageCollectorMXBean 获得。它不断增加,因为每个年轻一代的收藏都会增加它。在底部图表中,您可以看到许多年轻一代的收藏正在发生。
任何网络应用程序都需要年轻代集合(这就是 OpenSearch 集群):您不断发出请求(查询或更新),而这些请求会产生垃圾。
我建议查看主要收藏统计数据。根据我使用 OpenSearch 的经验,当您执行大量更新时(可能是合并索引的结果),就会发生这些情况。但是,除非您不断更新集群,否则它们应该很少出现。
如果您确实遇到内存压力,唯一真正的解决方案是迁移到更大的节点大小。由于索引在节点之间分片的方式,添加节点可能不会有帮助。
AWS 控制台和自动 CloudWatch 仪表板中针对新旧垃圾收集 (GC) 事件和时间的 Elastic Search/索引性能提供的 OpenSearch 指标是累积的。
这对于性能监控完全没有用,但可以通过将计算的指标添加到指标报告中来解决。
对于计数:
执行时间:
这将给出“每个垃圾收集事件的时间”
您可以隐藏 COUNT 和 TIME 指标;适当设置比例并添加水平注释/阈值以方便性能监控。