背景
环境
linux系统
RocketMQ Dledger集群模式
RocketMQ 4.7.1版本
现象
执行mqadmin clusterList 查看集群列表,磁盘空间使用率为-1
原因
跟源码看下这条命令的执行流程,不是来分析源码的,所以源码细节忽略,有兴趣,直接根据下面的提示查看源码,源码也比较直白,看起来很简单:
1.从MQAdminStartup类的initCommand()方法,找到这个命令的类:ClusterListSubCommand
2.从ClusterListSubCommand类里printClusterBaseInfo方法上,可以找到这个磁盘空间使用率的字段,看字面意就是commitLog所在分区已经使用的磁盘空间占比:
3.看下broker端怎么处理commitLogDiskRatio这个字段:
第2步标红框:KVTable kvTable = defaultMQAdminExt.fetchBrokerRuntimeStats(next1.getValue());的这个方法,是请求获取获取broker运行状态信息,根据请求码,进入broker的AdminBrokerProcessor类这个地方:
4.一路跟源码,进入AdminBrokerProcessor类的这个方法里:prepareRuntimeInfo()
5.在DefaultMessageStore类里找到了最终想要的这个值
6.看下怎么计算的:
有多种情况返回 -1值。
实际我写这篇文章进行测试的时候,这里是该路径的目录不存在的原因,看下这个路径path的值:
好的,这是个默认值,如果默认配置启动broker,那就确认下家目录下有没有store/commitlog这个目录,没有的话,创建就行。
如果启动broker的时候,指定了配置,那就按配置的storePathCommitLog的路径,创建一下目录即可。
顺便说一下,broker启动的时候初始化这个配置的代码位置,在BrokerStartup类里:
总结
出现磁盘使用率为-1,一般是配置的storePathCommitLog的路径不存在,创建这个路径的目录即可。