如何為 OpenSearch Service 叢集上的 JVM 記憶體壓力過高進行疑難排解?

1 分的閱讀內容
0

我的 Amazon OpenSearch Service 叢集 JVM 記憶體壓力過高,我不知道如何解決這個問題。

簡短說明

預設情況下,OpenSearch Service 會使用執行個體 50% 的 RAM,來處理大小最多 32 GiB 的 JVM 堆積。JVM 記憶體壓力會指定叢集節點中 Java 堆積的百分比。以下準則指出 JVM 記憶體壓力百分比的含義:

  • 如果 JVM 記憶體壓力達到 75%,則 OpenSearch Service 會對 x86 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體類型,啟動並行標記掃描 (CMS) 記憶體回收器。以 ARM 為基礎的 Graviton Amazon EC2 執行個體類型,使用 Garbage-First (G1) 記憶體回收器,此記憶體回收器會使用額外的簡短暫停和堆積重組。記憶體回收是一個大量佔用 CPU 的程序。如果記憶體使用量持續增加,您可能會遇到 ClusterBlockExceptionJVM OutOfMemoryError 或其他叢集效能問題。如需詳細資訊,請參閱從連續繁重的處理負載中復原
  • 如果 JVM 記憶體壓力超過 92% 達 30 分鐘,則 OpenSearch Service 會封鎖所有寫入作業。
  • 如果 JVM 記憶體壓力達到 100%,則 OpenSearch Service JVM 會設定為結束,並最終因為「記憶體不足」(OutOfMemory,OOM) 而導致重新啟動。

下列原因可能會造成 JVM 記憶體壓力過高:

  • 叢集的請求數量激增。
  • 在查詢中使用彙總、萬用字元,以及選取廣泛的時間範圍。
  • 跨節點或叢集中碎片太多的不平衡碎片分配。
  • 欄位資料或索引對應爆炸。
  • 執行個體類型無法處理傳入的負載。

解決方法

減少進入叢集的流量,以解決 JVM 記憶體壓力過高的問題。若要減少進入叢集的流量,請遵循下列最佳實務:

  • 使用 POST /index_name/_cache/clear?fielddata=true API 操作,清除欄位資料快取。
    **注意:**清除快取可能會中斷進行中的查詢。
  • 請勿彙總文字欄位,或將對應類型變更為 keyword。
  • 擴展網域,使每個節點的堆積大小上限為 32 GB。
  • 開啟慢速日誌 (OpenSearch 網站) 以判斷錯誤的要求。
    **注意:**請確認 JVM 記憶體壓力低於 90%。如需有關 Elasticsearch 查詢過慢的詳細資訊,請參閱 Elasticsearch 網站上的進階調整:尋找和修正 Elasticsearch 查詢過慢
  • 選擇正確的碎片數量,以最佳化搜尋或索引。如需有關索引和碎片計數的詳細資訊,請參閱如何重新平衡 Amazon OpenSearch Service 叢集中不均勻的碎片分佈?
  • 刪除舊的或未使用的索引,以減少碎片的數量。
  • 對於進階使用者,可以依照使用案例,更新父欄位資料快取分配,或請求斷路器設定。如需有關 JVM 斷路器的詳細資訊,請參閱 JVM OutOfMemoryError

如需有關如何疑難排解 JVM 記憶體壓力過高的詳細資訊,請參閱為什麼我的 OpenSearch Service 節點會當機?

相關資訊

疑難排解 Amazon OpenSearch Service

如何縱向或橫向擴展 Amazon OpenSearch Service 網域?

開始使用 Amazon Elasticsearch Service: 我需要多少碎片?

AWS 官方
AWS 官方已更新 1 年前