【问题标题】:asp.net WCF service slow... will disabling asp.net app recycling help?asp.net WCF 服务慢...禁用 asp.net 应用程序回收有帮助吗?
【发布时间】:2010-10-20 04:30:17
【问题描述】:

我的 WCF 服务需要一定的响应时间(不到 1 分钟)。

我的问题是每隔一段时间,通常是在早上,服务需要很长时间才能响应(有时超过 2 分钟)。

我认为这是因为应用程序已回收,第一次运行必须重新编译。

还有其他可能发生这种情况的原因吗?

是否可以关闭应用回收?如果是,那会导致任何副作用或不稳定吗?我假设将 asp.net 应用程序设置为回收是有原因的。

还有什么可以提高首次运行性能的方法吗?

【问题讨论】:

    标签: asp.net wcf performance recycle application-pool


    【解决方案1】:

    基本上,以下规则规定了应用程序何时被回收或卸载:

    1. 达到应用程序池回收时间后 - 我认为默认情况下是每 29 小时一次。
    2. 最后一次请求应用程序后的设定时间。

    使用 keep-alive 来 ping 服务将解决 2,然后您只需要处理 1。

    根据您的 IIS 版本,配置方式略有不同。

    1. For IIS 6
    2. For IIS 7

    我认为空闲超时通常默认为“infinte”,但可以通过配置文件的processModel element (idleTimeout attribute) 进行配置。

    至于首次运行性能 - 不查看您的应用很难说,您是否运行过类似 DotTrace 或其他分析器的东西?

    您是否在第一次加载时进行了大量密集查找和缓存数据?这些可以延期吗?

    【讨论】:

      【解决方案2】:

      也许是一个愚蠢的想法:您能否安排一个控制台应用程序来访问您的服务,例如早上 5 点 30 分,这样这个请求会需要很长时间才能运行,而你之后进来的普通用户不会有这个问题?

      当然 - 它没有解决根本原因,但就目前而言,它可能是一个有用的解决方法 - 不是吗?

      马克

      【讨论】:

        【解决方案3】:

        性能问题可能是由您没有首先排除的任何原因引起的。既然你没有排除任何东西,那它可能是由任何东西引起的。

        【讨论】:

        • 有什么常见的问题我应该看看吗?现在我认为这是应用程序池回收,因为问题发生在应用程序池回收的时候。加上 WCF 服务调用具有相同回收设置的其他服务,我可以看到它们的响应时间几乎在一天中的同一时间跳跃。
        • 我应该补充一点,我们查看了流量和服务器的性能,并且在服务需要很长时间时没有看到任何流量峰值。
        • 如果您可以确认应用程序池确实在接近性能峰值发生时回收,那么您就不会做出假设 - 您会知道的。
        【解决方案4】:

        是的,您可以阻止 AppPool 回收。另一种选择是创建一个保持活动状态的作业来持续 ping 服务以防止工作进程休眠。

        【讨论】:

          猜你喜欢
          • 2010-10-30
          • 1970-01-01
          • 1970-01-01
          • 2012-02-19
          • 2012-11-17
          • 1970-01-01
          • 2013-01-27
          • 2014-05-18
          • 2020-03-07
          相关资源
          最近更新 更多