【问题标题】:Process Management Library流程管理库
【发布时间】:2013-01-19 13:41:31
【问题描述】:

我正在开发一个 OLAP 应用程序、WCF + Silverlight 客户端(最多 100 个并发用户)。不幸的是,一个特定的服务调用有时会发疯(尽管它完全有效,只是太复杂了)并且偶尔(每月一次)会导致整个服务器停机(通过消耗所有 CPU)。

解决方案将涉及杀死用户请求甚至整个用户会话,从业务角度来看,这对我们来说没什么大不了的 - 恢复/重新启动整个应用程序。

将用户会话隔离到单独的进程中的想法非常诱人:CPU/内存节流和干净的资源处理(不像 Thread.Abort) - 如果现代浏览器可以仅针对网页执行此操作,那么也许是时候在服务器。我们只是想评估这个概念,看看在我们的特定场景中的利弊。

因此问题:

  1. 是否已有可用于管理进程(例如预生成/重用进程、限制、超时后终止)的库/框架?
  2. 是否有任何“最佳实践”或指南来创建此类架构?

【问题讨论】:

    标签: c# .net web-services process


    【解决方案1】:

    我的 WCF 服务也有同样的问题,它们也为 100 多个客户提供服务。 以及我使用 IIS 日志发现的问题 (C:\Windows\System32\LogFiles\HTTPERR) 我在 IIS 设置的应用程序池回收超时中发现了我的问题。 应用程序池每 48 小时重新启动一次,这导致已订阅的客户端出现问题。 所以我建议 1. 分析 http 错误日志和 IIS 日志,如果有任何应用程序池关闭或回收,它们将提供有关所有应用程序池状态的更多信息。 2. 如果应用程序池崩溃,则为 Windbg 设置并附加进程设置正确的源文件路径。如果发生任何异常,它会告诉您位置。

    【讨论】:

    • 谢谢 Sumeet。但就我而言,问题是没有发生异常。系统 (CPU) 只是被单个用户执行的复杂操作阻塞了。
    • 所以如果我理解正确,您担心 100% CPU 使用率?为了解决 100% CPU 问题,请尝试在循环或持续运行的代码上放置一个 Thread.sleep(1) 以改善很多.我有近 90 个线程不断运行以与设备通信,并且在 1 天后 CPU 利用率为 100%,然后我将 Thread.sleep(6) 降低到 30%。
    猜你喜欢
    • 2012-04-23
    • 2011-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多