轮询任务执行器内存泄漏
Poller Task Executor Memory Leak
我正在构建一个企业应用程序,我正在使用活动 mq 进行应用程序之间的内部通信。当我将任务执行器与我的轮询器 AbstractPollingEndpoint 和 ErrorHandlingTaskExecutor 对象实例一起使用时,会导致内存泄漏。即使应用程序处于空闲模式,堆中的对象计数也会增加。当我关闭这部分代码时
.taskExecutor(outTaskExecutor)
问题不再发生。但是我们正在为大流量做准备,我们不需要提供更多的线程来处理消息。我究竟做错了什么?你能帮忙吗?
谢谢
Visual VM Heap Comparison
Executor Service outTaskExecutor = Executors.newFixedThreadPool(10);
IntegrationFlow jmsOutbound = IntegrationFlows.from(jmsInChannel)
.handle(Jms.outboundAdapter(this.jmsTemplate.getConnectionFactory())
.destinationExpression("headers['responseQueueName']")
, s -> s.poller(p -> p.fixedDelay(pollerDelay).taskExecutor(outTaskExecutor)).get())
.get();
this.flowContext.registration(jmsOutbound).id("jmsOutbound").register();
每个动态流都有 Executor Service outTaskExecutor = Executors.newFixedThreadPool(10);
看起来不对。为什么不将其作为 单例 并与所有动态流共享?
另请注意文档中对类似问题的描述:https://docs.spring.io/spring-integration/reference/html/#async-polling
加上这个问题:
我正在构建一个企业应用程序,我正在使用活动 mq 进行应用程序之间的内部通信。当我将任务执行器与我的轮询器 AbstractPollingEndpoint 和 ErrorHandlingTaskExecutor 对象实例一起使用时,会导致内存泄漏。即使应用程序处于空闲模式,堆中的对象计数也会增加。当我关闭这部分代码时
.taskExecutor(outTaskExecutor)
问题不再发生。但是我们正在为大流量做准备,我们不需要提供更多的线程来处理消息。我究竟做错了什么?你能帮忙吗?
谢谢
Visual VM Heap Comparison
Executor Service outTaskExecutor = Executors.newFixedThreadPool(10);
IntegrationFlow jmsOutbound = IntegrationFlows.from(jmsInChannel)
.handle(Jms.outboundAdapter(this.jmsTemplate.getConnectionFactory())
.destinationExpression("headers['responseQueueName']")
, s -> s.poller(p -> p.fixedDelay(pollerDelay).taskExecutor(outTaskExecutor)).get())
.get();
this.flowContext.registration(jmsOutbound).id("jmsOutbound").register();
每个动态流都有 Executor Service outTaskExecutor = Executors.newFixedThreadPool(10);
看起来不对。为什么不将其作为 单例 并与所有动态流共享?
另请注意文档中对类似问题的描述:https://docs.spring.io/spring-integration/reference/html/#async-polling
加上这个问题: