您可以尝试降低在您的中的commitlog_total_space_in_mb
设置。对于64位系统,默认设置为8192MB(在您的<.yaml>文件中应该是注释掉的...在设置它时,您需要取消注释)。通常,在规划磁盘大小时考虑这一点是个好主意。
您可以通过在提交日志目录上运行du
来验证此操作:
$ du -d 1 -h ./commitlog
8.1G ./commitlog
尽管较小的提交日志空间会导致更频繁的刷新(增加磁盘I/O),因此您需要关注一下。
编辑20190318
我对我的4年前的回答有一个相关的想法。我看到它最近受到了一些关注,并希望确保正确的信息出现。
重要的是要注意,有时提交日志可能会呈“失控”状态增长。基本上,这可能是因为节点上的写入负载超过了Cassandra跟上刷新memtable的能力(因此,删除旧的commitlog文件)。如果您发现一个节点有数十个commitlog文件,并且数量似乎不断增长,那么这可能是您的问题。
实际上,您的 memtable_cleanup_threshold
可能太低了。尽管该属性已弃用,但您仍然可以通过降低 memtable_flush_writers
的数量来控制它的计算。
memtable_cleanup_threshold = 1 / (memtable_flush_writers + 1)
文档已于3.x更新,但以前曾经这样说:
# memtable_flush_writers defaults to the smaller of (number of disks,
# number of cores), with a minimum of 2 and a maximum of 8.
#
# If your data directories are backed by SSD, you should increase this
# to the number of cores.
#memtable_flush_writers: 8
......我感觉这导致很多人将这个值设置得太高。
假设设置为8,memtable_cleanup_threshold
的值为.111
。 当所有memtable的占用空间超过可用内存的这个比例时,会进行刷盘操作。太多的刷盘操作会阻塞写入,从而使这一过程变得缓慢。对于只有一个/data
目录的情况下,我建议将该值设置为2。