tomcat启动一会后自动关闭_RocketMQ生产环境启动后进程自动退出原因

本文描述了一次生产环境中RocketMQ集群遇到的问题,由于AWS云实例宕机,导致B组Master节点宕机。在恢复过程中,由于JVM内存映射数超出系统限制(max_map_count),引发进程崩溃。解决方案是调整系统内核参数max_map_count至合理值,避免进程因内存映射限制而离线。问题的排查和解决过程对于理解RocketMQ集群管理和内存管理有重要参考价值。
摘要由CSDN通过智能技术生成

背景

公司核心交易链路业务使用RocketMQ承载,集群规模为NameSrv 2台,Broker 集群2组 为2主2从同时在线,异步刷盘,异步复制,打开写堆外内存。

起因

生产环境使用AWS日本云实例,RocketMQ B组Master节点所在物理机突然宕机,在处理过程中B组Master A节点在恢复服务不久后进程Crash导致离线(时间不等)。

过程

  • 生产环境AWS宕机
  • 切换RocketMQ B套Slave节点为Master恢复服务
  • 控制台重启B套Master所在云实例
  • 原B套Master节点修改为Slave节点
  • 启动
  • 运行一段时间后发现B套Slave(原Master)自动离线

分析

SSH终端进入机器后查看发现进程消失

a1cacf28e2f6aee72e276bedfc43f52c.png

查看日志发现无法分配内存。

b61e457bf107c78ce2143682c75488d5.png

查看GC log,期间运维多次重启。

34bbb633862ba8c9473f21bc2150a253.png

查看GC log发现并无异常。

e90fa48f260c3a4a68207c7905ea857f.png

经排查,JVM分配内存并未超过实例内存总数,并且该节点机基本无其他进程。

cat /proc/<pid>/status
cat /proc/<pid>/maps |wc -l

查看后发现VM映射超限

cat /proc/sys/vm/max_map_count
65530

本实例max_map_count为65530,查询其余3个节点均为655360。

原因

sudo sysctl -w vm.max_map_count=655360

os.sh内核参数调优脚本中:sysctl -w参数为临时生效,重启后失效。

解决

执行os.sh或手动修改参数生效。

相关

事后在RocketMQ Issue发现同样问题。

Issue:https://github.com/apache/rocketmq/issues/1100

调优脚本链接:https://github.com/apache/rocketmq/blob/master/distribution/bin/os.sh

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值