我们用的是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压力。

 

相关文章:

  • 2021-08-09
  • 2022-12-23
  • 2021-12-06
  • 2021-08-10
  • 2021-10-21
  • 2021-06-11
  • 2021-09-11
  • 2022-12-23
猜你喜欢
  • 2021-09-14
  • 2022-01-14
  • 2021-11-02
  • 2021-12-28
  • 2021-11-15
相关资源
相似解决方案