我的 Amazon OpenSearch Service 集群的 Java 虚拟机 (JVM) 内存压力很高,我想减少这种压力。
默认情况下,OpenSearch Service 将 Amazon Elastic Compute Cloud (Amazon EC2) 实例 RAM 的 50% 用于高达 32 GiB 的 JVM 堆。JVM 内存压力指定了集群节点中 Java 堆的百分比。
以下场景可能会导致 JVM 高内存压力:
要解决 JVM 高内存压力问题,请减少集群流量。
运行以下命令以获取有关集群的节点级别统计信息,并识别遇到内存压力或垃圾回收过多的节点:
GET _nodes/stats/jvm
要进一步识别错误的请求,请启用慢速日志。有关详细信息,请参阅 OpenSearch 网站上的 Shard slow logs(分片慢速日志)。确保 JVM 内存压力低于 90%。有关慢速查询的详细信息,请参阅 Elasticsearch 网站上的 Advanced tuning: finding and fixing slow Elasticsearch queries(高级调整:查找并修复慢速 Elasticsearch 查询)。
使用 Amazon CloudWatch 监控一段时间内的 JVM 内存使用量和垃圾回收行为。在遇到集群不稳定性之前,使用此信息来检测模式并执行操作。此外,配置 CloudWatch 警报以主动检测和解决 JVM 高内存压力。
要清除字段数据缓存,请运行以下查询:
POST /index_name/_cache/clear?fielddata=true
**注意:**清除缓存时,可能会中断正在进行的查询。
如果超出了 JVM 断路器限制,并且内存使用量未得到控制,则会收到 JVM OutOfMemoryError。要解决此问题,请根据您的配置要求修改父断路器字段数据缓存分配或请求断路器设置。有关如何修改这些集群级别设置的信息,请参阅 OpenSearch 网站上的 Cluster settings API(集群设置 API)。
请按照以下最佳实践来优化您的配置:
有关如何对 JVM 高内存压力进行故障排除的详细信息,请参阅为什么我的 OpenSearch Service 节点崩溃了?
以下场景显示了 OpenSearch Service 如何管理不同的 JVM 内存压力百分比:
对 OpenSearch Service 进行故障排除
Get started with OpenSearch Service: How many shards do I need?(开始使用 OpenSearch Service:我需要多少分片?)