Problemas de espaço de memória Java do Cassandra

Está a ver a documentação do Apigee e do Apigee Hybrid.
Não existe nenhum equivalente na documentação do Apigee Edge para este tópico.

Sintoma

Os problemas de memória de processamento do Cassandra podem causar lentidão na execução do proxy híbrido do Apigee ou até mesmo erros Datastore. Por vezes, os registos são um indicador precoce, mesmo antes do início dos sintomas.

Mensagem de erro

Nos registos do pod do Cassandra (Registos na nuvem), podem ser observadas entradas de registos semelhantes às seguintes:

WARN  [Service Thread] 2023-01-01 01:14:51,121 GCInspector.java:283 - G1 Young Generation GC in 2510ms...
...
WARN  [Service Thread] 2023-01-01 01:14:51,121 GCInspector.java:283 - G1 Old Generation GC in 3100ms...
2023-01-01 01:14:51,123 FailureDetector.java:278 - Not marking nodes down due to local pause of 45261214670 > 5000000000
java.lang.OutOfMemoryError: Java heap space

Causa: tamanho da memória Java insuficiente

Diagnóstico

No ficheiro overrides.yaml para a instalação do Apigee Hybrid, maxHeapSize não está definido como um valor suficiente. Isto pode dever-se a definições de produção não aplicadas ou a débitos atuais que requerem uma definição superior ao habitual.

Resolução

Para resolver o problema, ajuste maxHeapSize e memory em conformidade e aplique as alterações:

  resources:
    requests:
      cpu: 7
      memory: 15Gi
  maxHeapSize: 8192M
  heapNewSize: 1200M

Se o problema persistir com a configuração de produção predefinida, experimente aumentar ainda mais os valores. Tenha em atenção que também tem de garantir que a capacidade do nó, o débito do disco e a largura de banda da rede são suficientes.

  resources:
    requests:
      cpu: 7
      memory: 30Gi
  maxHeapSize: 16384M
  heapNewSize: 2400M

Se a definição de memória dinâmica de 16 GB ainda não for suficiente para o volume de tráfego, continue com o dimensionamento horizontal.

Tem de recolher informações de diagnóstico

Se o problema persistir mesmo depois de seguir as instruções acima, reúna as seguintes informações de diagnóstico e, em seguida, contacte o apoio ao cliente da Google Cloud:

Além dos dados habituais que lhe podem ser pedidos, recolha os dados de diagnóstico de todos os pods do Cassandra com o comando abaixo:

for p in $(kubectl -n apigee get pods -l app=apigee-cassandra --no-headers -o custom-columns=":metadata.name") ; do \
for com in info describecluster failuredetector version status ring info gossipinfo compactionstats tpstats netstats cfstats proxyhistograms gcstats ; do kubectl \
-n apigee exec ${p} -- bash -c 'nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD '"$com"' 2>&1 '\
| tee /tmp/k_cassandra_nodetool_${com}_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt | head -n 40 ; echo '...' ; done; done

Comprima-o e faculte-o no registo de apoio técnico:

tar -cvzf /tmp/cassandra_data_$(date +%Y.%m.%d_%H.%M.%S).tar.gz /tmp/k_cassandra_nodetool*