这是因为bin 目录下启动 nameserv 与 broker 的 runbroker.sh 和 runserver.sh 文件中默认分配的内存太大,rocketmq比较耗内存,所以默认分配的内存比较大,而系统实际内存却太小导致启动失败, 通常像虚拟机上安装的 CentOS 服务器内存可能是没有高的,只能调小。实际中应该根据服务器内存情况,配置一个合适的值

# There is insufficient memory for the Java Runtime Environment to continue. 
# Native memory allocation (mmap) failed to map 8589934592 bytes for committing 
reserved memory. 
# An error report file with more information is saved as: 
# /data/program/rocketmq-all-4.5.0-bin-release/bin/hs_err_pid6465.log

解决办法

修改runbroker.sh和runbroker.sh

JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512g" 
Xms 是指设定程序启动时占用内存大小。一般来讲,大点,程序会启动的快一点,但是也可能会导致机器暂时
间变慢。
Xmx 是指设定程序运行期间最大可占用的内存大小。如果程序运行需要占用更多的内存,超出了这个设置值, 
就会抛出OutOfMemory异常。
xmn 年轻代的heap大小,一般设置为Xmx的3、4分之一

 
停止服务 

【sh bin/mqshutdown broker】 //停止 brokersh 

【bin/mqshutdown namesrv】 //停止 nameserver 

停止服务的时候需要注意,要先停止broker,其次停止nameserver。

broker.conf文件 

默认情况下,启动broker会加载conf/broker.conf文件,这个文件里面就是一些常规的配置信息

namesrvAddr //nameserver地址

brokerCl usterName //Cluster名称,如果集群机器数比较多,可以分成多个cluster,每个cluster提供
给不同的业务场景使用

brokerName //broker名称,如果配置主从模式,master和slave需要配置相同的名称来表名关系

brokerId=0 //在主从模式中,一个master broker可以有多个slave,0表示master,大于0表示不同
slave的id 

brokerRole=SYNC_MASTER/ASYNC_MASTER/SLAVE ; 同步表示slave和master消息同步完成后再返回
信息给客户端

autoCreateTopicEnable = true ; topic不存在的情况下自动创建

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐