Ir para o conteúdo

Como soluciono problemas de alta pressão de memória de JVM no meu cluster do OpenSearch Service?

4 minuto de leitura
0

Meu cluster do Amazon OpenSearch Service tem alta pressão de memória de Java Virtual Machine (JVM) e eu quero reduzi-la.

Breve descrição

Por padrão, o OpenSearch Service usa 50% de RAM de uma instância do Amazon Elastic Compute Cloud (Amazon EC2) para heaps de JVM de até 32 GiB. A pressão de memória de JVM especifica a porcentagem do heap do Java em um nó do cluster.

Os seguintes cenários podem causar alta pressão de memória de JVM:

  • Picos no número de solicitações ao cluster
  • Agregações, curingas e amplos intervalos de tempo nas consultas
  • Alocações de fragmentos desequilibradas entre nós ou muitos fragmentos em um cluster
  • Explosões de dados de campo ou de mapeamento de índices
  • Tipos de instância do Amazon EC2 que não conseguem gerenciar carga de entrada

Resolução

Monitore padrões em seus dados

Reduza o tráfego para o cluster para solucionar problemas de alta pressão de memória de JVM.

Execute o comando a seguir para obter estatísticas em nível de nó sobre seu cluster e identificar nós que enfrentam pressão de memória ou coleta excessiva de resíduos:

GET _nodes/stats/jvm

Para identificar ainda mais as solicitações com defeito, ative os logs lentos. Para obter mais informações, consulte Shard slow logs (Fragmentar logs lentos) no site do OpenSearch. Certifique-se de que a pressão de memória de JVM está abaixo de 90%. Para obter mais informações sobre consultas lentas, consulte Ajuste avançado: localização e correção de consultas lentas do Elasticsearch no site do Elasticsearch.

Use o Amazon CloudWatch para monitorar o uso de memória de JVM e o comportamento da coleta de resíduos ao longo do tempo. Use essas informações para detectar padrões e agir antes de enfrentar a instabilidade do cluster. Além disso, configure alarmes do CloudWatch para detectar e solucionar proativamente a alta pressão de memória de JVM.

Verifique suas configurações de cache

Para limpar o cache de dados do campo, execute a seguinte consulta:

POST /index_name/_cache/clear?fielddata=true

Observação: ao limpar o cache, é possível interromper as consultas que estão em andamento.

Se você exceder os disjuntores JVM e seu uso de memória permanecer desmarcado, receberá um OutOfMemoryError de JVM. Para solucionar esse problema, modifique a alocação do cache de dados do campo do disjuntor principal ou as configurações do disjuntor de solicitação com base nos requisitos da sua configuração. Para obter mais informações sobre como modificar essas configurações em nível de cluster, consulte Cluster settings API (API de configurações de cluster) no site do OpenSearch.

Otimize sua configuração

Use as seguintes práticas recomendadas para otimizar sua configuração:

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

Entenda os efeitos da alta pressão de memória de JVM

Os cenários a seguir mostram como o OpenSearch Service gerencia diferentes porcentagens de pressão de memória de JVM:

  • Se a pressão de memória de JVM atingir 75%, o Amazon OpenSearch Service inicia o coletor de resíduos Concurrent Mark Sweep (CMS) para instâncias do tipo x86. Os tipos de instância Graviton baseados em ARM usam o coletor de resíduos Garbage-First (G1), que usa pausas curtas extras e desfragmentação de heap.
    Observação: a coleta de resíduos é um processo que exige muita CPU. Se o uso da memória continuar aumentando, você poderá se deparar com erros “ClusterBlockException”, “JVM OutOfMemoryError” ou outros problemas de desempenho do cluster.
  • Se a pressão de memória de JVM exceder 92% por 30 minutos, o OpenSearch Service bloqueia todas as operações de gravação.
  • Se a pressão de memória de JVM atingir 100%, o OpenSearch Service sairá e, eventualmente, reiniciará a instância com a mensagem de erro “OutOfMemory (OOM)”.

Informações relacionadas

Solução de problemas do Amazon OpenSearch Service

Get started with OpenSearch Service: How many shards do I need? (Conceitos básicos do OpenSearch Service: quantos fragmentos são necessários?)

AWS OFICIALAtualizada há 3 meses