case:
runbroker.sh JAVA_OPT 使用的是默认参数,broker运行过程中新生代垃圾回收次数较少,频繁出现老生代垃圾回收 cms gc ,并且老生代内存回收不掉。造成卡顿、消息发送失败。最终导致java heap 被占用完,broker 宕机。求教!
内存分析:
broker瘫痪之后使用jmap生成dump文件,使用MAT进行分析,发现HAService实例Retained 大量内存。
服务器模式是3m ,没有使用slave,但是从机刷盘的服务却占用大量内存,且不能被回收。问题显而易见。
解决方式一:启动slave
解决方式二:重构代码rocketmq_store.jar ,去除slave相关。
经过进一步调查 HAService ,发现对应的日志文件store.log 中存在大量
HAService receive new connection, /172.16.50.105:xxxxx
并且启动大量的
WriteSocketService service started
并且没有被关闭,应该对应有WriteSocketService service end ,但是日志中只有很少一部分。
与Problem Suspect 1 一致!
解决方案:已查清 172.16.50.105 为监控机,频繁连接导致上述问题。停止监控broker服务器。
时间: 2024-10-10 11:03:14