rocketmq icon indicating copy to clipboard operation
rocketmq copied to clipboard

rocketmclient :报错event executor terminated

Open onejimmyboy opened this issue 1 year ago • 2 comments

Before Creating the Bug Report

  • [X] I found a bug, not just asking a question, which should be created in GitHub Discussions.

  • [X] I have searched the GitHub Issues and GitHub Discussions of this repository and believe that this is not a duplicate.

  • [X] I have confirmed that this bug belongs to the current repository, not other repositories of RocketMQ.

Runtime platform environment

centos

RocketMQ version

broker:5.1.3 client:4.9.3

JDK Version

1.8

Describe the Bug

[MQClientFactoryScheduledThread] ERROR i.n.u.c.D.rejectedExecution-Failed to submit a listener notification task. Event loop shut down? java.util.concurrent.RejectedExecutionException: event executor terminated at io.netty.util.concurrent.SingleThreadEventExecutor.reject(SingleThreadEventExecutor.java:805) at io.netty.util.concurrent.SingleThreadEventExecutor.offerTask(SingleThreadEventExecutor.java:345) at io.netty.util.concurrent.SingleThreadEventExecutor.addTask(SingleThreadEventExecutor.java:338) at io.netty.util.concurrent.SingleThreadEventExecutor.execute(SingleThreadEventExecutor.java:748) at io.netty.util.concurrent.DefaultPromise.safeExecute(DefaultPromise.java:767) at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:435) at io.netty.util.concurrent.DefaultPromise.tryFailure(DefaultPromise.java:129) at io.netty.channel.AbstractChannel$AbstractUnsafe.safeSetFailure(AbstractChannel.java:852) at io.netty.channel.AbstractChannel$AbstractUnsafe.register(AbstractChannel.java:434) at io.netty.channel.SingleThreadEventLoop.register(SingleThreadEventLoop.java:72) at io.netty.channel.SingleThreadEventLoop.register(SingleThreadEventLoop.java:60) at io.netty.channel.MultithreadEventLoopGroup.register(MultithreadEventLoopGroup.java:64) at io.netty.bootstrap.AbstractBootstrap.initAndRegister(AbstractBootstrap.java:320) at io.netty.bootstrap.Bootstrap.doConnect(Bootstrap.java:134) at io.netty.bootstrap.Bootstrap.connect(Bootstrap.java:116) at org.apache.rocketmq.remoting.netty.NettyRemotingClient.createChannel(NettyRemotingClient.java:478) at org.apache.rocketmq.remoting.netty.NettyRemotingClient.getAndCreateNameserverChannel(NettyRemotingClient.java:433) at org.apache.rocketmq.remoting.netty.NettyRemotingClient.getAndCreateChannel(NettyRemotingClient.java:394) at org.apache.rocketmq.remoting.netty.NettyRemotingClient.invokeSync(NettyRemotingClient.java:363) at org.apache.rocketmq.client.impl.MQClientAPIImpl.getTopicRouteInfoFromNameServer(MQClientAPIImpl.java:1207) at org.apache.rocketmq.client.impl.MQClientAPIImpl.getTopicRouteInfoFromNameServer(MQClientAPIImpl.java:1197) at org.apache.rocketmq.client.impl.factory.MQClientInstance.updateTopicRouteInfoFromNameServer(MQClientInstance.java:605) at org.apache.rocketmq.client.impl.factory.MQClientInstance.updateTopicRouteInfoFromNameServer(MQClientInstance.java:492) at org.apache.rocketmq.client.impl.factory.MQClientInstance.updateTopicRouteInfoFromNameServer(MQClientInstance.java:361) at org.apache.rocketmq.client.impl.factory.MQClientInstance$3.run(MQClientInstance.java:278) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745)

Steps to Reproduce

客户端在消费消息的时候

What Did You Expect to See?

消费正常

What Did You See Instead?

消费失败,客户端打印上面的错误日志

Additional Context

消费失败,客户端打印上面的错误日志

onejimmyboy avatar May 24 '24 08:05 onejimmyboy

根据您提供的信息,该问题似乎源于客户端在尝试与RocketMQ服务端建立连接或通信时遭遇了事件循环线程(Event Loop)关闭的异常。这通常意味着底层网络库(Netty)无法正确处理任务队列中的任务,可能是由于线程池已被关闭或者资源不足导致的。以下是对该问题的分析及潜在解决策略,尽管原始的知识参考未直接提供针对此特定异常的解决方案,但我们可以基于常见原因进行推理:

分析原因: 资源限制或线程池配置不当:可能是因为系统资源(如CPU、内存)不足,或者Netty的线程池配置不恰当,导致线程被提前终止或拒绝新的任务提交。

网络问题或服务端不可达:如果RocketMQ Broker服务端不可达或响应超时,客户端在反复尝试连接时可能会触发此类异常。

客户端配置错误:客户端配置可能存在问题,例如心跳机制、连接超时设置不当,导致客户端无法维持与服务端的有效连接。

版本兼容性问题:虽然您提到了使用的RocketMQ broker和client版本,但理论上不同版本间可能存在兼容性问题,特别是当服务端与客户端版本跨度较大时。

解决步骤:

  1. 检查系统资源与配置 确认服务器(CentOS)的CPU、内存使用情况,确保资源充足。 检查Netty的线程池配置是否合理,必要时调整io.netty.eventLoopThreads等参数以适应您的环境需求。
  2. 网络连通性验证 确保网络畅通无阻,可以通过ping或telnet命令测试与RocketMQ Broker地址(127.0.0.1:9876)的连通性。 查看Broker服务端日志,确认服务端运行正常且没有拒绝连接的记录。
  3. 客户端配置审查 重新审视客户端配置文件(如application.properties),确认rocketmq.name-server配置正确,且与服务端实际地址匹配。 调整客户端连接相关的配置项,比如心跳间隔、重试策略等,确保它们符合预期。
  4. 版本兼容性验证 尽管直接的版本不兼容不太可能是该异常的直接原因,但可以考虑检查社区是否有相关版本组合下的已知问题,并考虑升级或降级客户端/服务端版本以寻求更稳定的组合。
  5. 日志深入分析 开启客户端日志的详细模式,获取更多上下文信息,特别是连接建立、心跳维护等相关日志,有助于进一步定位问题。 结论解释: 以上步骤旨在从系统资源、网络连通性、配置合理性以及软件版本兼容性等方面入手,逐一排查并解决导致客户端连接失败的潜在因素。由于原始知识参考未提供直接的解决方案,上述建议基于通用故障排查逻辑,需要您根据实际情况灵活应用。希望这些步骤能帮助您诊断并解决当前遇到的问题。

参考链接: *专家经验:收发消息的例子


如需要更深入学习了解rocketmq ,可以访问&收藏这个网站:https://rocketmq-learning.com/ 。 提供了各类学习资料,以及专家答疑

answeropensource avatar Aug 12 '24 02:08 answeropensource

这个问题一般是客户端内存oom过,然后有部分线程出现oom退出了。检查一下客户端的日志

leizhiyuan avatar Aug 15 '24 06:08 leizhiyuan