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压力。

 

posted on 2017-11-19 11:33  dearplain  阅读(1583)  评论(0编辑  收藏  举报