בעיות בנפח ה-heap של Java ב-Cassandra

תיאור הבעיה

בעיות ב-heap של Cassandra עלולות לגרום להאטה בהרצת ה-proxy של Apigee Hybrid או אפילו לשגיאות Datastore. לפעמים היומנים הם אינדיקטור מוקדם, עוד לפני הופעת התסמינים.

הודעת השגיאה

ביומנים של Cassandra pod (Cloud Logging), יכול להיות שיופיעו רשומות ביומן שדומות לרשומות הבאות:

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

הסיבה: גודל ה-heap של Java לא מספיק

אבחון

בקובץ overrides.yaml של התקנת Apigee Hybrid, הערך של maxHeapSize לא מוגדר כערך מספיק. יכול להיות שהסיבה לכך היא ש הגדרות הייצור לא הוחלו, או שהתפוקה הנוכחית מחייבת הגדרה גבוהה מהרגיל.

רזולוציה

כדי לפתור את הבעיה, צריך לשנות את הערכים של maxHeapSize ושל memory בהתאם, ו להחיל את השינויים:

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

אם הבעיה נמשכת עם הגדרת ברירת המחדל של הייצור, נסו להגדיל עוד יותר את הערכים. חשוב לוודא גם שהקיבולת של הצומת, התפוקה של הדיסק ו רוחב הפס של הרשת מספיקים.

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

אם הגדרת ה-heap של 16GB עדיין לא מספיקה לנפח התנועה, צריך להמשיך עם הגדלת הקיבולת האופקית.

צריך לאסוף פרטי אבחון

אם הבעיה נמשכת גם אחרי שמבצעים את ההוראות שלמעלה, צריך לאסוף את נתוני האבחון הבאים ואז לפנות אל Cloud Customer Care:

בנוסף לנתונים הרגילים שתידרשו לספק, תצטרכו לאסוף את נתוני האבחון מכל ה-pods של Cassandra באמצעות הפקודה הבאה:

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

דוחסים אותו ומצרפים אותו לבקשת התמיכה:

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