由于频繁GC,Cassandra内存不足



我遇到了一次网络级中断,在这期间,我的12台服务器中有8台由于我们尝试使用16k的nproc硬限制不正确而停机。

发布消息称,我们将其增加到32k(希望有32GB RAM也可以),并重新启动了所有服务器。由于内存不足,我在一个DC中的4台服务器似乎经常出现故障。当我检查日志时,

  1. 我发现了很多GC检查员的日志打印。

  2. 每次关闭应用程序时,缓存的内存似乎仍然被占用。我需要删除缓存并启动应用程序吗?我做了几次,即使在那时GC也从未结束。它不断吞噬记忆,走向死亡。GC的印刷品是从ParNew开始的。你知道怎么解决这个问题吗?

  3. 我清除了正在进行的压缩以启动服务器,有几次它们阻止了重新启动。这似乎是在每次之间开始的。这是个问题吗?你知道怎么解决这个问题吗?

    使用的Cassandra版本:2.0.3

由于离线诊断gc问题即使不是不可能,也很困难,因此我建议阅读这篇文章。它提供了关于gc和JVM设置的详细信息。试着听从他们的建议并调整你的设置。http://tech.shift.com/post/74311817513/cassandra-tuning-the-jvm-for-read-heavy-workloads

默认的JVM堆设置是根据内核数量等计算的。因此,它很容易偏离目标,甚至可能是"有害的",正如这里所描述的:https://issues.apache.org/jira/browse/CASSANDRA-8150

因此,我们的想法是调整新一代内存,使其足够大,以阻止短命物体被提升到幸存者空间,甚至旧一代内存。

以下是另一篇关于cassandra JVM调优的好文章:http://blog.mikiobraun.de/2010/08/cassandra-gc-tuning.html

这篇文章专门讨论了契约和GC问题:http://aryanet.com/blog/cassandra-garbage-collector-tuning

最新更新