记一次 RocketMQ broker 因内存不足导致的启动失败


title: 记一次 RocketMQ broker 因内存不足导致的启动失败
date: 2021-01-12
updated: 2021-01-12
categories:

  • RocketMQ
    tags:
  • 消息中间件
  • RocketMQ

背景

该小节交代问题发生的背景,急需解决问题的小伙伴,可以跳过本节,直接看下一小节

因为项目提测,需要搭建一套测试环境。所以呢,是时候展示真正的技术啦!在搞定了容器、中间件、项目镜像后,小西登录系统对各大模块的功能进行测试。事情到了这里,小西本来应该会就这样愉快地完成了部署任务,可是生活总是会给你带来意想不到的“惊喜”。

  • 在测试一类预警事件消息时,忽然发现压根没有消息,就去 RocketMQ 的控制台界面查看,发现控制台原本应该乖乖被监控的 broker 一个都不在了。

  • 在不考虑 broker 不会自己罢工跑掉的情况下,登录服务器查看 broker 服务,发现服务没有启动成功。

  • 再查看 broker 的启动日志,发现启动报错了。

于是,就有了这篇分享。



部署环境

操作系统:Centos7 Linux 系统

部署方式:Docker 容器 + docker-compose 容器编排

部署版本:RocketMQ 4.4.0

问题描述

开发环境访问 RocketMQ 控制台,发现 broker 服务宕机。登录服务器查看日志发现以下报错:

Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c0000000, 7163871232, 0) failed; error=
 ...
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 7163871232 bytes for Failed to commit area from 0x00000000c0000000 to
 ...

提示内存分配无法满足 7163871232 字节的需求。那为什么会出现这个问题呢?

问题定位

重启broker

刚开始没有排查日志时,以为环境被人停掉了,所以对 broker 进行了重启。

[root@172-30-1-135 nginx]# docker-compose restart

发现 broker 启动依旧失败,而 namesrv 和 console 启动正常。

分析启动脚本

登录 RocketMQ 的 docker 容器。

注意:因为 broker 无法启动,使用 docker exec 是无法进入容器的,需要使用 docker run 命令进入容器

[root@37-128-2
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值