RocketMQ无聊的细节之磁盘空间使用比为什么是-1

背景

环境

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的路径不存在,创建这个路径的目录即可。

猜你喜欢

转载自blog.csdn.net/x763795151/article/details/110940473