Como solucionar problemas de alta demanda de memória da JVM em meu cluster do Amazon OpenSearch Service?

Data da última atualização: 23/07/2021

Meu cluster do Amazon OpenSearch Service (sucessor do Amazon Elasticsearch Service) tem alta pressão de memória da JVM. O que significam os diferentes níveis de pressão de memória da JVM e como reduzi-los?

Resolução

A pressão de memória da JVM especifica a porcentagem do heap Java em um nó de cluster. As diretrizes a seguir indicam o que significam as porcentagens de pressão de memória da JVM:

  • Se a pressão de memória da JVM atingir 75%, o Amazon OpenSearch Service acionará o coletor de lixo Concurrent Mark Sweep (CMS – Varredura de marca simultânea). A coleta de lixo é um processo que usa muitos recursos da CPU. Se a pressão de memória da JVM permanecer nessa porcentagem por alguns minutos, você poderá encontrar ClusterBlockException, JVM OutOfMemoryError ou outros problemas de performance do cluster.
  • Se a pressão da memória da JVM exceder 92% por 30 minutos, o OpenSearch Service bloqueará todas as operações de gravação.
  • Se a pressão de memória da JVM atingir 100%, a JVM do OpenSearch Service será configurada para sair e, eventualmente, reiniciará em OutOfMemory (OOM).

A alta pressão da memória da JVM pode ser causada pelos seguintes motivos:

  • Picos no número de solicitações para o cluster.
  • Agregações, curingas e seleção de intervalos de tempo amplos nas consultas.
  • Alocações de fragmentos desbalanceadas entre nós ou muitos fragmentos em um cluster.
  • Explosões de mapeamento de dados de campo ou índices.
  • Tipos de instância que não conseguem lidar com cargas recebidas.

Você pode resolver problemas de alta pressão de memória da JVM reduzindo o tráfego para o cluster. Para reduzir o tráfego ao cluster, siga estas práticas recomendadas:

  • Limpe o cache de dados de campo com a operação de API POST/index_name/_cache/clear?fielddata=true.
    Observação: limpar o cache poderá interromper as consultas que estão em andamento.
  • Evite agregar em campos de texto ou altere o tipo de mapeamento para palavra-chave.
  • Escale o domínio (para que o tamanho máximo de heap por nó seja de 32 GB).
  • Habilite logs lentos para identificar solicitações com falha.
    Observação: verifique se a pressão de memória da JVM está abaixo de 90%. Para obter mais informações sobre consultas lentas do Elasticsearch, consulte Ajuste avançado: localizar e corrigir consultas lentas do Elasticsearch no site do Elasticsearch.
  • Otimize a pesquisa ou a indexação escolhendo o número correto de fragmentos. Para obter mais informações sobre indexação e contagem de fragmentos, consulte Conceitos básicos sobre o Amazon OpenSearch Service: de quantos fragmentos eu preciso?
  • Reduza o número de fragmentos excluindo índices antigos ou não utilizados.
  • Para usuários avançados, é possível atualizar as configurações pai, de fielddata ou solicitar configurações de disjuntores de acordo com seu caso de uso. Para obter mais informações sobre disjuntores da JVM, consulte JVM OutOfMemoryError.

Para obter mais informações sobre como solucionar problemas de alta pressão de memória da JVM, consulte Por que meu nó do Amazon OpenSearch Service travou?