我的 Amazon OpenSearch Service 集群具有高 JVM 内存压力,我不知道如何解决这个问题。
简短描述
默认情况下,OpenSearch Service 使用实例 RAM 的 50% 来处理大小不超过 32 GiB 的 JVM 堆。JVM 内存压力指定了集群节点中 Java 堆的百分比。以下指南说明了 JVM 内存压力百分比的含义:
- 如果 JVM 内存压力达到 75%,则 OpenSearch Service 会为 x86 Amazon Elastic Compute Cloud(Amazon EC2)实例类型启动并发标记清除(CMS)垃圾收集器。基于 ARM 的 Graviton Amazon EC2 实例类型使用垃圾优先(G1)垃圾收集器,该垃圾收集器使用额外的短暂停和堆碎片整理。垃圾回收是一个 CPU 密集型流程。如果内存使用量持续增长,那么您可能会遇到 ClusterBlockException、JVM OutOfMemoryError 或其他集群性能问题。有关详细信息,请参阅从连续繁重处理负载恢复。
- 如果 JVM 内存压力超过 92% 长达 30 分钟,则 OpenSearch Service 会阻止所有写入操作。
- 如果 JVM 内存压力达到 100%,则系统会将 OpenSearch Service JVM 配置为退出,并最终在 OutOfMemory(OOM)时重启。
以下原因可能会导致高 JVM 内存压力:
- 对集群的请求数量激增。
- 聚合、通配符和在查询中选择较宽的时间范围。
- 节点间的分片分配不均衡或者集群中的分片过多。
- 字段数据或索引映射爆炸式增长。
- 实例类型无法处理传入负载。
解决方法
减少集群流量以解决高 JVM 内存压力问题。要减少集群流量,请遵循以下最佳实践:
有关如何对高 JVM 内存压力进行故障排除的详细信息,请参阅为什么我的 OpenSearch Service 节点崩溃了?
相关信息
Amazon OpenSearch Service 故障排除
如何纵向扩展或横向扩展 Amazon OpenSearch Service 域?
开始使用 Amazon Elasticsearch Service: 我需要多少分片?