是什么导致IIS工作进程无法控制地增长?

时间:2009-10-30 14:03:09

标签: asp.net iis memory-leaks

什么可能导致IIS工作进程无法控制地增长?

我有一个错误,如果我拿一个页面并加载它有时它不会增加内存,少量内存(250k-2MB)或非常大的内存(10MB-30MB)。我不知道造成这种情况的原因是什么,但如果你能集思广益,可能会引起这种行为,我会很感激。

修改

所以显然你无法缓存.net控件并将其从缓存中拉出来,而不会以某种方式泄漏内存。我试图缓存一个菜单控件,导致每次从缓存请求时内存都会上升。在这种情况下,解决方案是将项目放入数组或字典中,然后缓存,然后在加载页面时重新创建项目。这解决了内存泄漏问题,这也是我找到它时遇到很多麻烦的原因。

3 个答案:

答案 0 :(得分:3)

如果你的应用程序发生了什么事情,我们很难说你是否有泄漏,或者这只是应用程序的自然工作内存使用情况。

您可能希望通过内存分析器运行您的应用程序,例如Red Gate的Ants Memory Profiler

同样Tess Ferrandezdebugging memory leaks上有一些很棒的文章。

答案 1 :(得分:1)

可能是一大堆原因。可能是你正在创建额外的会话,所以它分配更多的内存,你没有清理你的代码中的一些对象,必须得到一个新的连接到DB而不是重用一个,分配额外的内存来吸收预期的负载(如果你正在打它很快就可能会触发一些主动内存管理?)......然后列表继续。

每次都会吞下同样的东西吗?这个过程是否会成长和发展?

只是一页吗?您是否创建了一个空页面并监控它是否也是如此?然后尝试评论您的问题页面的各个部分,看看您是否可以隔离该程序?切换跟踪并观看什么时候被叫,什么时候?有疑问吗?

很多地方要看......也许可能会在serverfault.com上发布这个

答案 2 :(得分:0)

您可以发布该页面的代码,或者至少是一个片段的加载和初始化页面吗? 以下是一些可能有用的步骤:

  1. 报告第一个调用点的变量结果可能是审核您调用的静态资源或方法,并检查可能与这些资源或方法关联的初始化过程。
  2. 检查您的应用程序是否是唯一使用该特定应用程序池并且没有其他人连接的应用程序。
  3. 确保没有附加调试工具。 检查您的代码并确保正确退出所有循环,您没有进行递归,并且所有资源始终可访问且本地。
  4. 也许这会有所帮助,但如果没有看到您正在使用的代码,很难说。

    干杯

相关问题