我们发现Cassandra在生产环境中有大量写累积,并且我们的业务经历了很多写失败。 通过system.log,发现MemtableReclaimMemory在开始时处于挂起状态,然后在某个时刻出现了大量MutationStage堆栈。 最终,堆内存已满,GC时间达到数十秒,通过nodetool节点状态为DN,但Cassandra进程仍在运行,我们杀死了该节点并重新启动该节点,以上情况消失了。
Active MemtableReclaimMemory线程的数量似乎也保持在1。
(您可以看到1.PNG)
在某个时刻出现了大量MutationStage堆栈。
(您可以看到2.PNG)
较长的GC时间:
871毫秒内的G1老式GC。 G1老一代:51175946656-> 50082999760; MutationStage 128 11931622 1983820772 0 0 CounterMutationStage 0 0 0 0 0 MemtableReclaimMemory 1 156 24565 0 0 G1年轻一代GC在969毫秒内G1伊甸园空间:1090519040-> 0; G1老一代:50082999760-> 51156741584; 突变阶段128 11953653 1983820772 0 0 CounterMutationStage 0 0 0 0 0 MemtableReclaimMemory 1 156 24565 0 0 G1老式GC在84785毫秒内。 G1老一代:51173518800-> 50180911432; 突变阶段128 11967484 1983820772 0 0 CounterMutationStage 0 0 0 0 0 MemtableReclaimMemory 1 156 24565 0 0 G1年轻一代GC(611毫秒)。 G1伊甸园空间:989855744-> 0; G1老一代:50180911432-> 51153989960; MutationStage 128 11975849 1983820772 0 0 CounterMutationStage 0 0 0 0 0 MemtableReclaimMemory 1 156 24565 0 0 G1老一代GC在85845毫秒内。 G1老一代:51170767176-> 50238295416; 突变阶段128 11978192 1983820772 0 0 CounterMutationStage 0 0 0 0 0 MemtableReclaimMemory 1 156 24565 0 0 G1年轻一代GC(602毫秒)。 G1伊甸园空间:939524096-> 0; G1老一代:50238295416-> 51161042296; 突变阶段128 11994295 1983820772 0 0 CounterMutationStage 0 0 0 0 0 MemtableReclaimMemory 1 156 24565 0 0 G1上一代GC在85307毫秒内完成。 G1老一代:51177819512-> 50288829624;元空间:36554436-> 36525696 MutationStage 128 12001932 1983820772 0 0 CounterMutationStage 0 0 0 0 0 66-MutationStage 128 12004395 1983820772 0 0 66-CounterMutationStage 0 0 0 0 0 MemtableReclaimMemory 1 156 24565 0 0 66-MemtableReclaimMemory 1 156 24565 0 0 G1年轻一代GC(610毫秒)。 G1伊甸园空间:889192448-> 0; G1老一代:50288829624-> 51178022072; 突变阶段128 12023677 1983820772 0 0 为什么会这样呢?