如何在WSO2 ESB中设置ThreadPool(Dsnd_t_max)

时间:2013-03-12 12:41:40

标签: wso2 wso2esb

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

-Dsnd_t_core=120
-Dsnd_t_max=600

但后来我们遇到了WSO2 ESB的几个致命问题。几个JMS代理被阻止,不再消耗任何消息。最糟糕的事情:carbon.log中没有错误!

此外,服务器上的CPU负载也达到了100%。

重启没有解决问题,只有停用计划任务或代理才能解决问题。

我们现在发现,VFS代理正在创建120个线程(JConsole)。每个transport.PollInterval都会创建一个新的Thread。

您对-Dsnd_t_core和max使用哪些值?

为什么VFS代理会为每个PollInterval创建一个新线程(请参阅jconsole)?

1 个答案:

答案 0 :(得分:1)

只要我知道,WSO2 ESB线程基于java.util.concurrent ThreadPool。

在这个link中,您可以阅读一些ThreadPool特性,例如何时创建新线程,队列机制和拒绝任务策略。

您使用哪些值来表示-Dsnd_t_core和max?
-Dsnd_t_core是ThreadPool中的最小线程数。因此,WSO2 ESB将自动创建线程,就像设置-Dsnd_t_core一样。默认值为20.如果未指定-Dsnd_t_core,则WSO2 ESB将创建20个vfs-worker。
-Dsnd_t_max是ThreadPool中的最大线程数。如果达到最大数量,WSO2 ESB将停止创建新线程。

为什么VFS代理会为每个PollInterval创建一个新线程(请参阅jconsole)?
WSO2 ESB将在这些条件下创建一个新线程:

  
      
  • 如果运行的corePoolSize线程少于,则执行程序总是更喜欢添加新线程而不是排队。
  •   
  • 如果corePoolSize或更多线程正在运行,则Executor总是更喜欢排队请求而不是添加新线程。
  •   
  • 如果请求无法排队,则会创建一个新线程,除非这会超过maximumPoolSize,在这种情况下,任务将是   拒绝。
  •   

因此,只要您的队列已满并且未达到最大线程数,WSO2将创建一个新线程来处理进程。 PollInterval设置为指定服务开始之前的延迟,以从源文件夹中轮询消息或文件。

您可以将maxQueue数设置为unbound(-1),以便队列永远不会满,并且永远不会创建新线程。

我还从JConsole中找到了一些东西。 1个服务/ 1个代理服务将仅由1个线程处理。我仍然试图解决这个问题,使1个服务/ 1代理服务由2个或更多线程(多线程)处理。

希望这有助于回答你的问题:)