Descrição do Problema
The Excesso do JvmGcMonitorService avisos indicam que a Máquina Virtual Java (JVM) está realizando a Coleta de Lixo (GC) da Geração Antiga. Durante este processo, a JVM pausa todas as outras atividades para recuperar memória, levando a potenciais interrupções como:
- Falta de resposta dos nós do Elasticsearch a solicitações de cliente ou cluster.
- Desconexões de nós, que podem causar instabilidade no cluster.
Esse comportamento é frequentemente desencadeado por:
- Uso Excessivo de Heap: Um número alto de consultas complexas ou excesso de shards alocados em relação ao tamanho de heap JVM configurado.
- Configuração Pobre de Recursos: Configurações JVM desalinhadas ou distribuições de shards.
Achados e Observações Iniciais
Como parte da sua investigação, considere:
- Tendências de Uso de Heap:
- Inspecione o uso de heap JVM ao longo do tempo usando ferramentas de monitoramento (por exemplo, Stack Monitoring do Kibana ou métricas do
_nodes/statsAPI). - Identifique períodos de saturação do heap ou pausas prolongadas de GC.
- Comando a usar:
- GET /_nodes/stats/jvm
- Alocação e Tamanho dos Shards:
- Revise o número de shards por nó e seus tamanhos usando
_cat/shards. Contagens excessivas de shards levam a um maior consumo de memória.
- Comando a usar:
- GET /_cat/shards?v
- Complexidade das Consultas:
- Analise logs de consultas lentas ou monitore consultas frequentemente executadas. Agregações complexas ou buscas de caracteres curinga frequentemente sobrecarregam a memória JVM.
- Comando para habilitar logs lentos:
- # Adicionar ao elasticsearch.yml
- index.search.slowlog.threshold.query.warn: 10s
- index.search.slowlog.threshold.fetch.warn: 5s
- Padrões Incomuns:
- Verifique por picos em taxas de indexação, pesquisa ou outras atividades anômalas durante incidentes de sobrecarga de GC.
Recomendações
Otimizar Configurações de Heap JVM:
- Certifique-se de que o tamanho do heap esteja configurado adequadamente (50% da memória disponível, limitado a 30GB para prevenir a desativação de ponteiros de objetos comprimidos).
- Habilite G1GC, que oferece melhor performance para heaps grandes e cenários de alta taxa de transferência.
Reduzir Contagem de Shards:
- Combine índices pequenos ou use a Rollover API para gerenciar o crescimento do índice.
- Objetive 20 shards por GB de memória de heap como uma diretriz geral.
Ajustar Consultas:
- Reescreva consultas dispendiosas para melhorar a eficiência (por exemplo, evitar
*ou?em caracteres curinga). - Cacheie consultas frequentemente usadas usando o cache de consulta de pesquisa.
Implementar Monitoramento e Alertas:
- Use as ferramentas de monitoramento do Elastic para criar alertas para uso alto de heap ou tempos de GC lentos.
Escalonar o Cluster:
- Se as demandas de carga de trabalho estiverem consistentemente excedendo a capacidade, considere adicionar nós ao cluster para distribuir a carga.
Conclusão
A SOC Prime, como um parceiro MSP da Elastic, deve aproveitar sua expertise para analisar e resolver proativamente tais questões. A causa raiz frequentemente reside em desalinhamento de recursos do cluster com as demandas de carga de trabalho. Seguindo as estratégias delineadas, a estabilidade e desempenho do cluster podem ser significativamente melhorados.