Apache Geode Disk Store忽略dir-size属性,超限制仍生成溢出文件
问题原因及解决办法
可能的原因:
- 当前写入的oplog不受实时限制:Geode不会中断正在写入的oplog文件。当磁盘总占用接近100MB时,如果当前oplog还有剩余空间未写完,会继续写入直到该oplog完成,导致总占用暂时超过限制。比如当前oplog已写90MB,剩余10MB空间,即使总大小即将触碰100MB阈值,仍会写完这10MB,最终总占用达到100MB以上。
- oplog回收速度跟不上写入速度:当达到dir-size限制时,Geode会尝试回收旧oplog(删除数据已过期、被淘汰或已合并到其他oplog的文件)释放空间。但高负载下,回收线程的处理速度赶不上数据写入速度,Geode会暂时创建新oplog来容纳数据,直到回收完成。
- 默认oplog-size过大:若未显式设置
oplog-size,Geode默认oplog大小为1024MB(1GB),远大于你设置的100MB dir-size。此时第一个oplog创建后就会直接超过限制,后续写入自然会持续生成更多文件。 - dir-size仅在创建新oplog前检查:Geode只在准备创建新oplog时才检查总占用是否超过dir-size。如果当前oplog还有剩余空间,即使总占用已超限制,仍会继续写入当前oplog,直到写满才触发检查逻辑。
解决办法:
- 缩小oplog-size:显式设置
oplog-size为远小于dir-size的值,比如20MB,确保单个oplog不会占用过多空间,便于控制总磁盘占用:factory.setOplogSize(20); // 单位:MB - 优化oplog回收策略:调整压缩阈值,让Geode更及时地回收旧oplog。比如将压缩阈值设置为30%(默认50%),当oplog的可用空间占比低于30%时触发压缩回收:
factory.setCompactionThreshold(30); - 检查目录共享情况:确认没有其他Disk Store或非Geode文件占用该磁盘目录,避免空间计算偏差。
- 验证磁盘实际可用空间:确保磁盘实际剩余空间大于你设置的100MB,避免因磁盘本身空间不足导致异常行为。
内容的提问来源于stack exchange,提问作者William H
相关产品推荐
相关产品推荐

