cassandra的gc调优

我们用的是cassandra3.7官方的docker镜像,在生产环境发现有一个小时一次停顿的现象。我猜测是java gc的原因,于是看了cassandra的gc日志,果然发现有每小时长达300ms-2s的停顿。

经过研究发现是netty的原因,netty用了direct memory,因为是通过mmap分配,不属于新生代和老年代,需要手工gc(full gc),java默认一个小时调用一次,所以出现了很大的延迟。

通过加上并行gc的参数,解决了这个问题:

-XX:+ExplicitGCInvokesConcurrent
-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses

ps:调长新生代生存期或者调大新生代的比例似乎不是很有用,因为cassandra的临时对象很多,临时对象没有及时回收,反而造成更大的gc压力。

上一篇:srync:@ERROR: auth failed on module tee 的解决办法分析


下一篇:smtplib.SMTPAuthenticationError: (535, b'Error: authentication failed')解决办法