Cassandra Java 堆空间问题

您正在查看 ApigeeApigee Hybrid 文档。
此主题没有等效的 Apigee Edge 文档。

症状

Cassandra 堆问题可能会导致 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

原因:Java 堆大小不足

诊断

在 Apigee Hybrid 安装的 overrides.yaml 文件中,maxHeapSize 未设置为一个足够的值。这可能是因为未应用生产设置,或当前吞吐量要求设置比平常高。

解决方法

如需解决此问题,请相应地调整 maxHeapSizememory,然后应用更改

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

如果此问题在默认生产配置中仍存在,请尝试进一步增加值。请注意,您需要同时确保磁盘吞吐量网络带宽足够。

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

如果 16 GB 的堆设置仍不足以满足流量要求,请继续进行横向扩缩

必须收集的诊断信息

如果按照上述说明操作后问题仍然存在,请收集以下诊断信息,然后与 Google Cloud Customer Care 联系:

除了系统可能会要求您提供的常规数据之外,请使用以下命令从所有 Cassandra pod 中收集诊断数据:

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*