Amazon Elasticsearch Service 클러스터에서 높은 JVM 메모리 압력 문제를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 4월 14일

Amazon Elasticsearch Service(Amazon ES) 클러스터에서 JVM 메모리 압력이 높습니다. 다른 JVM 메모리 압력 수준은 무엇을 의미하며 이를 줄이려면 어떻게 해야 합니까?

해결 방법

JVM 메모리 압력은 클러스터 노드에서 Java 힙의 백분율을 지정합니다. 다음 지침은 JVM 메모리 압력 백분율의 의미를 나타냅니다.

  • JVM 메모리 부담이 75%에 도달하면 Amazon ES는 CMS(Concurrent Mark Sweep) 가비지 수집기를 트리거합니다. 가비지 수집은 CPU 집약적 프로세스입니다. JVM 메모리 압력을 몇 분 동안 이 비율로 유지하면 ClusterBlockException, JVM OutOfMemoryError 또는 기타 클러스터 성능 문제가 발생할 수 있습니다.
  • JVM 메모리 부담이 30분 동안 92%를 초과하면 Amazon ES가 모든 쓰기 작업을 차단합니다.
  • JVM 메모리 부담이 100%에 도달하면 Amazon ES JVM이 종료되고 결국 OutOfMemory(OOM)에서 다시 시작되도록 구성됩니다.

높은 JVM 메모리 압력은 다음과 같은 이유로 발생할 수 있습니다.

  • 클러스터에 대한 요청 수 급증.
  • 집계, 와일드카드 및 쿼리의 광범위한 시간 범위 선택.
  • 노드 간 불균형한 샤드 할당 또는 클러스터의 너무 많은 샤드.
  • 필드 데이터 또는 인덱스 매핑 폭발.
  • 수신 로드를 처리할 수 없는 인스턴스 유형.

클러스터에 대한 트래픽을 줄여 JVM 메모리 부족 문제를 해결할 수 있습니다. 클러스터에 대한 트래픽을 줄이려면 다음 모범 사례를 따르십시오.

  • POST /index_name/_cache/clear?fielddata=true API 작업을 사용하여 필드 데이터 캐시를 지웁니다.
    참고: 캐시를 지우면 진행 중인 쿼리가 중단될 수 있습니다.
  • 텍스트 필드를 집계하지 않도록 하거나 매핑 유형을 키워드로 변경합니다.
  • 도메인을 확장합니다(노드당 최대 힙 크기가 32GB가 되도록).
  • 느린 로그를 활성화하여 잘못된 요청을 파악합니다.
    참고: JVM 메모리 압박이 90% 미만인지 확인합니다. 느린 Elasticsearch 쿼리에 대한 자세한 내용은 탄력적 웹 사이트의 고급 튜닝: 느린 Elasticsearch 쿼리 찾기 및 수정을 참조하십시오.
  • 검색 인덱싱을 최적화하고 올바른 샤드 수를 선택합니다. 자세한 내용은 Amazon Elasticsearch Service 시작하기: 얼마나 많은 샤드가 필요합니까?를 참조하십시오.
  • 오래되거나 사용되지 않는 인덱스를 삭제하여 샤드 수를 줄입니다.
  • JVM에 대한 메모리 회로 차단기를 설정합니다. JVM 회로 차단기에 대한 자세한 내용은 JVM OutOfMemoryError를 참조하십시오.

높은 JVM 메모리 압력 문제를 해결하는 방법에 대한 자세한 내용은 내 Elasticsearch 노드가 충돌하는 이유는 무엇입니까?를 참조하십시오.