当前位置: 首页 > 工具软件 > rmq > 使用案例 >

rmq文件清理策略

强志学
2023-12-01

文件清理定时任务

DefaultMessageStore在启动时,会开启一个每隔cleanResourceInterval=10s执行一次的文件清理定时任务,检测当前小时是否是deleteWhen=4,来判断是否进行清理,可以配置多个小时数,分号分割,比如"4;6"。清理的文件包括commitLog、消费队列、索引文件。

清理日志文件

CleanCommitLogService负责commitLog的清理,清理条件:

  1. 文件最新一次修改时间是fileReservedTime=72小时前的
  2. CleanCommitLogService#isSpaceToDelete:磁盘空间占用过高,包括:commitLog或消费队列所在磁盘分区已用空间占用率超过85%,如果超过90%,还会将磁盘状态设为已满,拒绝消息写入。

清理逻辑:

  • 以文件为单位进行清理,而不是消息
  • 如果是磁盘占用造成的清理,会最多清理掉deleteFileBatchMax=10个commitLog
  • 清理步骤包括:释放MappedFileBuffer虚拟内存,删除文件,删除MappedFileQueue#mappedFiles
  • 清理实际上是1、先把文件的状态设为不可用,使得之后不能对该文件发起新的访问;2、使用引用计数法,使用文件前引用计数+1,使用后释放时计数-1,如果正在被使用,不会马上清理,只将计数-1,等到最后一个使用者使用完后,计数-1发现计数小于0,执
 类似资料: