3

我们有一个带有 HTTP 入站端点的 mule 应用程序,我试图弄清楚如何控制负载下的线程数。作为实验,我添加了以下配置:

<core:configuration>
    <core:default-threading-profile doThreading="false" maxThreadsActive="500" poolExhaustedAction="RUN"/>
</core:configuration>

在负载下,我看到超过 1000 个线程的线程数达到峰值。我不确定为什么会出现这种情况,给出 maxThreadsActive 设置和 doThreading="false"。阅读有关 poolExhaustedAction="RUN" 的信息,我希望侦听器线程在处理入站请求而不是产生新请求时阻塞,如果其积压队列已满,则最终拒绝连接。我从未见过被拒绝的客户端连接。

Mule 是否为应用程序中的每个入站端点维护一个单独的线程池(对不起,如果这在文档中)?即使是这样,也不要认为它有助于解释我所看到的。

任何帮助表示赞赏。我们在一个容器中运行多个 mule 应用程序,我想控制线程总数。

谢谢,阿尔菲。

4

1 回答 1

0

显然,doThreadingon 属性default-threading-profile不足以控制整个 Mule 线程,也不足以限制传输的特定线程行为。我认为您将获得 500 个用于 HTTP 消息接收器池的线程和 500 个用于 VM 消息调度程序池的线程。

我强烈建议您阅读有关调整 Mule 的信息:http: //www.mulesoft.org/documentation/display/current/Tuning+Performance

我的直觉是你需要

  • 在每个传输(VM、HTTP)上配置线程,严格指定接收器和调度器的池大小,
  • 选择阻止 Mule 产生新线程的流处理策略(即用于synchronous占用接收器线程),
  • 选择交换模式,也可以防止 Mule 产生新线程(即用于request-response搭载当前执行线程)。
于 2013-11-02T16:05:23.130 回答