Problemi di spazio nell'heap Java di Cassandra

Stai visualizzando la documentazione relativa a Apigee e Apigee ibrido.
Non esiste una documentazione Apigee Edge equivalente per questo argomento.

Sintomo

I problemi di heap di Cassandra possono causare rallentamenti nell'esecuzione del proxy ibrido Apigee o persino errori Datastore. A volte i log sono un indicatore precoce, anche prima dell'insorgenza dei sintomi.

Messaggio di errore

Nei log dei pod di Cassandra (Cloud Logging), è possibile che si osservano voci di log simili alle seguenti:

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: dimensioni heap Java insufficienti

Diagnosi

Nel file overrides.yaml per l'installazione ibrida di Apigee, maxHeapSize non è impostato su un valore sufficiente. Ciò potrebbe essere dovuto al fatto che le impostazioni di produzione non sono state applicate o alle velocità effettiva attuali che richiedono un'impostazione più elevata del solito.

Risoluzione

Per risolvere il problema, modifica maxHeapSize e memory di conseguenza e applica le modifiche:

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

Se il problema persiste con la configurazione di produzione predefinita, prova ad aumentare ulteriormente i valori. Tieni presente che devi assicurarti che anche la capacità del nodo, la velocità effettiva del disco e la larghezza di banda di rete siano sufficienti.

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

Se l'impostazione di heap da 16 GB non è ancora sufficiente per il volume di traffico, continua con la scalabilità orizzontale.

Raccogliere dati diagnostici

Se il problema persiste anche dopo aver seguito le istruzioni riportate sopra, raccogli le seguenti informazioni diagnostiche e contatta l'assistenza clienti Google Cloud:

Oltre ai soliti dati che potresti dover fornire, raccogli i dati diagnostici da tutti i pod Cassandra con il comando seguente:

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

Comprimilo e forniscilo nella richiesta di assistenza:

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