Probleme mit dem Java-Heap-Speicher von Cassandra

Sie lesen gerade die Dokumentation zu Apigee und Apigee Hybrid.
Für dieses Thema gibt es keine entsprechende Apigee Edge-Dokumentation.

Symptom

Cassandra-Heap-Probleme können zu einer Verlangsamung der Ausführung des Apigee Hybrid-Proxys oder sogar zu Datastore-Fehlern führen. Manchmal sind Protokolle ein frühes Warnzeichen, noch bevor die Symptome auftreten.

Fehlermeldung

In den Cassandra-Pod-Logs (Cloud Logging) können Logeinträge ähnlich wie die folgenden auftreten:

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

Ursache: Zu geringe Java-Heap-Größe

Diagnose

In der overrides.yaml-Datei für die Apigee Hybrid-Installation ist maxHeapSize nicht auf einen ausreichenden Wert festgelegt. Das kann daran liegen, dass Produktionseinstellungen nicht angewendet wurden oder dass für den aktuellen Durchsatz eine höhere Einstellung als üblich erforderlich ist.

Lösung

Passen Sie maxHeapSize und memory entsprechend an und wenden Sie die Änderungen an:

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

Wenn das Problem mit der Standardproduktionskonfiguration weiterhin besteht, versuchen Sie, die Werte weiter zu erhöhen. Außerdem müssen die Knotenkapazität, der Laufwerksdurchsatz und die Netzwerkbandbreite ausreichend sein.

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

Wenn die Einstellung von 16 GB für den Heap immer noch nicht für das Traffic-Volumen ausreicht, fahren Sie mit der horizontalen Skalierung fort.

Erfassen von Diagnoseinformationen erforderlich

Wenn das Problem auch nach Befolgen der obigen Anweisungen weiterhin besteht, sammeln Sie die folgenden Diagnoseinformationen und wenden Sie sich dann an den Google Cloud Customer Care:

Erfassen Sie mit folgendem Befehl die Diagnosedaten von den Cassandra-Pods, die eventuell zusätzlich zu den üblichen Daten bereitgestellt werden müssen:

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

Komprimieren Sie sie und stellen Sie sie im Supportfall bereit:

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