【RocketMQ】常见问题
启动内存不足
现象
启动报错,提示无法分配足够的内存
Java HotSpot(TM) 64-Bit Server VM warning: MaxNewSize (8388608k) is equal to or greater than the entire heap (8388608k). A new max generation size of 8388544k will be used.
Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000005c0000000, 8589869056, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 8589869056 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /usr/local/java/rocketmq-all-4.7.0-bin-release/bin/hs_err_pid10070.log
原因
bin目录下启动namesrv与broker的runbroker.sh
和runserver.sh
文件中默认分配的内存(8g)太大,而系统实际内存却太小导致启动失败
解决方法
修改bin目录下面的runbroker.sh
和runserver.sh
文件,修改JAVA_OPT
配置
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn1g"
-Xms1g
:设定程序启动时占用内存大小为1g
-Xmx1g
:设定程序运行期间最大可占用的内存大小为1g
-Xmn1g
:年轻代的heap大小为1g
No route info of this topic
现象
消息发送端启动,后台日志报No route info of this topic异常
原因
broker启动的时候没有设置自动创建topic,broker默认是禁止自动创建topic
解决方法
方法一:启动broker时加上autoCreateTopicEnable=true
参数
nohup sh mqbroker -n localhost:9876 autoCreateTopicEnable=true &
方法二:修改broker配置文件,添加autoCreateTopicEnable=true
配置
vim broker.conf
...
autoCreateTopicEnable = true
...
在启动broker时,指定配置文件
nohup sh mqbroker -n localhost:9876 -c ../conf/broker.conf &
-c
:手动指定配置文件
broker启动IP访问不到
现象
broker启动之后,无法访问,IP显示为docker的网卡IP
原因
在不配置brokerIP1时,会根据当前网卡选择一个IP作为broker的IP。当有多个IP时,默认IP可能不是期望的IP。
解决方法
修改broker配置文件,设置brokerIP1为指定的IP
vim broker.conf
...
brokerIP1 = 192.168.247.130
...
在启动broker时,指定配置文件
nohup sh mqbroker -n localhost:9876 autoCreateTopicEnable=true -c ../conf/broker.conf &
-c
:手动指定配置文件
磁盘空间满了
现象
生产端发送消息报错,RocketMQ返回如下异常
org.apache.rocketmq.client.exception.MQBrokerException: CODE: 14 DESC: service not available now, maybe disk full, CL: 0.92 CQ: 0.92 INDEX: 0.92, maybe your broker machine memory too small.
For more information, please visit the url, http://rocketmq.apache.org/docs/faq/
原因
- 检查磁盘空间,已用空间是95%
- RocketMQ的默认设置只是支持90%,超过则提示空间不足
解决方法
- 修改runbroker.sh脚本
vim /usr/local/rocketmq/bin/runbroker.sh
JAVA_OPT="${JAVA_OPT} -Drocketmq.broker.diskSpaceWarningLevelRatio=0.99"
- 重启RocketMQ
- 参考文章:https://blog.csdn.net/bufegar0/article/details/108720482
评论区