【问题标题】:Should I set ASP.NET application pool to auto-recycle?我应该将 ASP.NET 应用程序池设置为自动回收吗?
【发布时间】:2011-07-08 10:15:33
【问题描述】:

我有许多 ASP.NET (4.0) Web 应用程序似乎在每次请求期间泄漏(少量)内存。它是如此之小,以至于对于大多数用例而言,它不会一次成为问题数周甚至数月。我通常会尽量关闭由应用程序管理的任何连接,避免状态变量(或我的单例的实例变量)等。

我的问题是 - 这是 ASP.NET 应用程序的正常行为吗?在空闲 20 分钟后,我关闭了回收应用程序池的默认 (IIS 7) 行为。我这样做是因为应用程序需要几分钟来构建其内部缓存,并且我想避免对用户体验产生负面影响(并让他们在发出请求时等待应用程序启动)。

我知道这可以通过序列化缓存或加速缓存生成过程来缓解,但我的问题更多地与它的原理有关:我个人认为依赖 IIS 自动回收功能作为一种创可贴的方法。我错了吗?我只是因为应用程序的内存使用量与可用内存量相比不够高而没有看到垃圾收集器在工作吗?还是我应该深入挖掘内存问题?

任何见解将不胜感激。

【问题讨论】:

  • 关于内存泄漏问题 - 确保释放所有一次性 (IDispose) 对象。您可以使用 Gendarme (mono-project.com/Gendarme) 等静态代码分析工具在代码中查找这些类型的问题,或者使用运行时分析器在运行时捕获这些问题。

标签: asp.net iis-7 application-pool recycle


【解决方案1】:

不幸的是,它正常的,尽管主要是由于伪劣的应用程序编写者而不是其他原因。

出于这个原因,IIS 默认将新创建的应用程序池配置为每 1740 分钟回收一次。

正如你所说,这是创可贴。清除所有资源(包括悬空事件处理程序)的编写良好的应用程序根本不应该泄漏。

请参阅 this 关于该主题的博文。

【讨论】:

    猜你喜欢
    • 2011-01-12
    • 2013-12-27
    • 1970-01-01
    • 2012-08-11
    • 2011-08-22
    • 1970-01-01
    • 2020-05-23
    • 2010-12-02
    • 1970-01-01
    相关资源
    最近更新 更多