【问题标题】:WCF with worker thread limit具有工作线程限制的 WCF
【发布时间】:2014-09-30 13:17:26
【问题描述】:

我已经为一个旧的 COM/OLE 服务器实例编写了一个 .net 包装器。它是一个有状态的包装器,需要一些初始化调用,然后是最终的“go/calculate 调用”。

此最终调用创建一个类的新实例,然后使用 System.Threading.Thread 创建一个新线程,该线程创建 COM 实例并使其能够独立于 IIS 工作线程运行,随后调用检查状态和最终得到结果。

问题是,当我尝试创建超过 20 个并发实例时,我会遇到内存不足异常。我尝试了各种调整 - 由于有状态的性质(我相信),创建多个工作线程无济于事。我已经尝试了很多这些

http://www.codeproject.com/Articles/133738/Quick-Ways-to-Boost-Performance-and-Scalability-of

无济于事。在我的压力测试器中,我尝试直接实例化包装类,而不是通过 WCF 服务,我可以在开始遇到问题之前运行超过 150 个实例。

有人知道增加 IIS 实例可以产生的工作线程数量的方法吗?

【问题讨论】:

  • 不 - 正如我所说,我可以直接在同一个盒子上拨打电话并获得超过 150 个实例。只有当调用作为服务进行时,我才会获得 20 的硬限制。
  • OOM异常在哪里抛出?这是什么组件?什么调用栈?服务器进程是 32 位的,也许你的其他测试进程是 64 位的?
  • 创建 'Activator.CreateInstance(rtwbType)' 时抛出异常,它是 64 位框,但 WCF 服务是 32 位的,它正在实例化的 COM/OLE 服务器也是如此。在抛出异常时,已经创建了一个新线程。该异常通常会导致当前整个 IIS 工作进程停止运行。
  • IIS 工作者在 19 个实例中的私有字节值是多少?让我们确保这与内存无关。
  • 好的,听起来很明智。我该如何检查?限制为 0,即没有限制....

标签: c# multithreading iis com


【解决方案1】:

听起来您可能会从使用网络花园中受益。将应用程序池设置中的最大工作进程设置为 > 1。

在这种情况下,它们可以帮助提高吞吐量,但理想情况下,您应该查看代码以识别和优化瓶颈。

https://serverfault.com/questions/81689/web-gardens-are-they-good-or-bad-or-what

请注意,缺点是:在 proc 会话状态中不会跨应用程序池维护,如果您使用的是 asp http 缓存,每个进程都将拥有自己的缓存副本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    • 1970-01-01
    相关资源
    最近更新 更多