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 Logs ein frühzeitiger Indikator, noch bevor Symptome auftreten.

Fehlermeldung

In Cassandra-Pod-Logs (Cloud Logging) werden möglicherweise Logeinträge beobachtet, die in etwa so aussehen:

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: Unzureichende Java-Heap-Größe

Diagnose

In der overrides.yaml-Datei für die Apigee Hybrid-Installation ist maxHeapSize nicht auf einen ausreichenden Wert festgelegt. Dies kann daran liegen, dass keine Produktionseinstellungen angewendet wurden oder dass aktuelle Durchsätze eine höhere Einstellung als üblich erfordern.

Lösung

Zum Beheben des Problems 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 neben den üblichen Daten, die Sie möglicherweise bereitstellen müssen, die Diagnosedaten von den Cassandra-Pods mit folgendem Befehl:

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*