rocketmq在linux上启动失败主因是jvm内存配置过高,需将runserver.sh和runbroker.sh中默认参数(如-xms2g -xmx2g)按服务器内存下调至-xms1g -xmx1g等,并正确配置broker.conf的namesrvaddr、brokerip1及namesrv_addr环境变量。

RocketMQ 在 Linux 上不是“装完就跑”的软件,不改 JVM 参数几乎必然启动失败,且 namesrvAddr 和 brokerIP1 填错会导致客户端连不上——哪怕日志显示“启动成功”。
runserver.sh 和 runbroker.sh 的 JVM 内存必须手动调大
默认配置(如 -Xms2g -Xmx2g)在多数云服务器(尤其是 2G/4G 内存实例)上会直接触发 java.lang.OutOfMemoryError 或被系统 OOM Killer 杀掉。
打开
bin/runserver.sh,找到类似这行:JAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g -Xmn1g ..."改为(4G 以下内存机器适用):JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"打开
bin/runbroker.sh,同样位置改为:JAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"修改后务必保存,否则
nohup sh bin/mqnamesrv &启动后tail -f ~/logs/rocketmqlogs/namesrv.log只能看到半行日志就中断。
broker.conf 里 namesrvAddr 和 brokerIP1 必须填真实可达 IP
填 localhost 只适用于本地测试;只要 Producer/Consumer 在另一台机器上,就一定连不上。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
namesrvAddr是 NameServer 地址,要写成服务端对外可访问的 IP + 端口,例如:namesrvAddr=192.168.1.100:9876(内网)或namesrvAddr=203.208.60.1:9876(公网)brokerIP1是 Broker 对外通告的 IP,不能是 127.0.0.1 或内网不可达地址,否则 Consumer 拉消息时会连向一个根本不存在的地址:brokerIP1=192.168.1.100(与 namesrvAddr 同网段)
若用云服务器(如阿里云、腾讯云),此处必须填公网 IP,并确保安全组放行9876(NameServer)、10911(Broker 默认端口)、10912(Broker HA 端口)启动 Broker 时必须显式指定
-n参数,且值要和namesrvAddr一致:sh bin/mqbroker -n 192.168.1.100:9876 -c conf/broker.conf
客户端连不上?先检查 NAMESRV_ADDR 环境变量
mqadmin、tools.sh、Spring Boot 应用都依赖这个环境变量,它和 broker.conf 里的 namesrvAddr 是两回事,但值必须一致。
启动前执行:
export NAMESRV_ADDR=192.168.1.100:9876如果漏设或设错,
mqadmin clusterList会返回空,不是没数据,而是根本连错了地方。测试发送消息前也得设:
export NAMESRV_ADDR=192.168.1.100:9876 && sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
最常被忽略的一点:Broker 启动后监听的是 0.0.0.0:10911,但 Consumer 实际连接的是 brokerIP1:10911 —— 这个 IP 必须能从客户端网络直连,且防火墙/安全组已放行。 单靠 netstat -tuln | grep 10911 看到监听了,不代表客户端真能通。










