Problèmes d'espace de tas de mémoire Java Cassandra

Vous consultez la documentation d'Apigee et d'Apigee hybrid.
Il n'existe pas de documentation Apigee Edge équivalente pour ce sujet.

Symptôme

Les problèmes de tas de mémoire Cassandra peuvent ralentir l'exécution du proxy Apigee hybrid, voire même entraîner des erreurs Datastore. Parfois, les journaux sont un indicateur précoce, même avant l'apparition des symptômes.

Message d'erreur

Dans les journaux de pod Cassandra (Cloud Logging), des entrées de journal semblables à ce qui suit peuvent être observées :

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

Cause : taille du tas de mémoire Java insuffisante

Diagnostic

Dans le fichier overrides.yaml de l'installation Apigee hybrid, maxHeapSize n'est pas défini sur une valeur suffisante. Cela peut être dû à l'absence d'application des paramètres de production ou à des débits actuels nécessitant un paramètre plus élevé que d'habitude.

Solution

Pour résoudre le problème, ajustez maxHeapSize et memory en conséquence, puis appliquez les modifications :

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

Si le problème persiste avec la configuration de production par défaut, essayez d'augmenter davantage les valeurs. Notez que vous devez vous assurer que la capacité des nœuds, le débit du disque et la bande passante réseau sont également suffisants.

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

Si le paramètre de tas de mémoire de 16 Go n'est toujours pas suffisant pour le volume de trafic, poursuivez avec le scaling horizontal.

Vous devez collecter des informations de diagnostic

Si le problème persiste, même après avoir suivi les instructions ci-dessus, rassemblez les informations de diagnostic suivantes, puis contactez Google Cloud Customer Care :

Outre les données habituelles que vous pouvez être invité à fournir, collectez les données de diagnostic de tous les pods Cassandra à l'aide de la commande ci-dessous :

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

Compressez-les et incluez-les dans la demande d'assistance :

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