为什么 w3wp.exe 消耗过多的内存?

为什么 w3wp.exe 消耗过多的内存?

我遇到了一个奇怪的问题,IIS7 决定为一个很小的网页加载大量内存。每次请求时,它都会向进程添加 2 到 20MB 的内存,而我却无法弄清楚原因。我已经仔细查找了内存泄漏,但似乎找不到发生这种情况的地方。有人能建议我该怎么做才能隔离问题吗?

答案1

您需要的是内存分析器。一个好的内存分析器可以审核您的 .NET 代码,它会指出占用最多内存的对象以及它们在代码中的分配位置。如果没有这样的工具,很难甚至不可能查明实际问题(想想几小时或几天,而不是几周)。

您可以说所有数据库连接都已关闭并处置,但这是真的吗?您是否在所有可处置对象周围使用了 using 语句(任何实现 IDisposable 的对象都可能泄漏资源,包括内存)?有一些代码审查工具可以帮助您分析代码(例如 ReSharper)。

一些分析器:

如果我没记错的话,使用 YourKit 获得了最佳结果(它的开销最小,但在实时服务器上仍然很重要)。.NET 还存在许多其他内存和性能分析器。

答案2

如果你不知道怎么做,找到记忆的来源并不容易。(我也不知道……)

您可能想尝试看看是否可以找出导致此问题的代码:

  • 当您仅使用 Hello World 脚本创建新应用程序时会发生这种情况吗?
  • 它是否发生在您网站的某个特定页面上或每个页面上?

你可能想阅读:配置应用程序池的回收设置 (IIS 7).
就你的情况而言:达到请求限制时进行回收

答案3

您是否尝试过使用任何 .NET 内存分析器?这可能比使用 WinDBG 跟踪内存分配情况更轻松。

相关内容