【发布时间】:2021-08-16 17:28:22
【问题描述】:
在生产环境中使用具有 18 个节点和 32 GB 内存的 Cassandra 3.11,每周压缩作业会在 system.log 和 debug.log 中引发以下错误,然后 Cassandra 进程终止,我必须启动 Cassandra。
ERROR [ReadStage-4] JVMStabilityInspector.java:142 - JVM state determined to be unstable. Exiting forcefully due to: java.lang.OutOfMemoryError: Direct buffer memory
ERROR [ReadStage-5] JVMStabilityInspector.java:142 - JVM state determined to be unstable. Exiting forcefully due to: java.lang.OutOfMemoryError: Direct buffer memory
DEBUG [ReadRepairStage:29517] ReadCallback.java:242 - Digest mismatch:
org.apache.cassandra.service.DigestMismatchException: Mismatch for key DecoratedKey(-3787568997731881233, 0000000004ca5c48) (2b912cd2000e6bb5b481fa849e438ae4 vs 962e899380ce22ac970c6be0014707de)
Java 堆大小为 8 GB
/opt/apache-cassandra-3.11.0/conf/jvm.options
-Xms8G
-Xmx8G
除了增加堆大小来防止压缩期间出现内存不足问题之外,还有其他解决方法吗?
【问题讨论】:
-
您使用的是哪个 GC? CMS 还是 G1? G1 在处理更大的堆时做得更好,但 CMS 也可以处理这些(只是需要转动更多的旋钮)。
-
一个较旧的答案,其中包含一些可能对这里有用的信息:stackoverflow.com/questions/63361756/…