如何在WSO2 ESB中设置线程池(Dsnd_t_max)

如何在WSO2 ESB中设置线程池(Dsnd_t_max),wso2,wso2esb,Wso2,Wso2esb,WSO2 ESB未加载所有代理(超过20个)。然后,我们在启动脚本中增加了以下两个值,并且成功了: -Dsnd_t_core=120 -Dsnd_t_max=600 但随后我们遇到了WSO2 ESB的几个致命问题。几个JMS代理被阻止,不再使用消息。最糟糕的是:carbon.log中没有错误 此外,服务器上的CPU负载增加到100% 重新启动并不能解决问题,只有停用计划任务或代理才能解决问题 我们现在发现,一个VFS代理恰好创建了120个线程(JConsole)。对于每个transport.P

WSO2 ESB未加载所有代理(超过20个)。然后,我们在启动脚本中增加了以下两个值,并且成功了:

-Dsnd_t_core=120
-Dsnd_t_max=600
但随后我们遇到了WSO2 ESB的几个致命问题。几个JMS代理被阻止,不再使用消息。最糟糕的是:carbon.log中没有错误

此外,服务器上的CPU负载增加到100%

重新启动并不能解决问题,只有停用计划任务或代理才能解决问题

我们现在发现,一个VFS代理恰好创建了120个线程(JConsole)。对于每个transport.PollInterval,它都会创建一个新线程

您对-Dsnd\u t\u核心和最大值使用哪些值?


为什么VFS代理在每个轮询间隔创建一个新线程(请参见jconsole)?

据我所知,WSO2 ESB线程基于java.util.concurrent ThreadPool

在本文中,您可以了解一些线程池特性,如何时创建新线程、队列机制和拒绝任务策略

哪些值用于-Dsnd\u t\u核心和最大值?
-Dsnd_t_core是线程池中的最小线程数。因此,WSO2 ESB将自动创建与您设置-Dsnd\u t\u核心一样多的线程。默认值为20。如果不指定-Dsnd\u t\u核心,WSO2 ESB将创建20个vfs工作进程
-Dsnd_t_max是线程池中的最大线程数。如果达到最大数量,WSO2 ESB将停止创建新线程

为什么VFS代理在每个轮询间隔创建一个新线程(请参阅jconsole)?
WSO2 ESB将在以下条件下创建新线程:

  • 如果正在运行的线程少于corePoolSize,则执行器总是倾向于添加新线程,而不是排队
  • 如果corePoolSize或多个线程正在运行,那么执行器总是倾向于将请求排队,而不是添加新线程
  • 如果请求无法排队,则会创建一个新线程,除非该线程将超过maximumPoolSize,在这种情况下,任务将被删除 拒绝
因此,只要队列已满且未达到最大线程数,WSO2就会创建一个新线程来处理进程。PollInterval设置为指定服务开始轮询源文件夹中的邮件或文件之前的延迟

您可以将maxQueue编号设置为unbound(-1),这样队列就永远不会满,也永远不会创建新线程。

我还从JConsole中找到了一些东西。1个服务/1个代理服务将仅由1个线程处理。我仍在努力解决这个问题,并使1个服务/1个代理服务由2个或更多线程(多线程)处理
希望这将有助于回答您的问题:)

回答得不错,而且似乎合乎逻辑。但有一件事我不明白,它在每个轮询间隔创建一个新线程,即使队列是空的——这很奇怪。这些线程将处于等待模式并继续存在,即使它们从未收到消息。。。