我遇到了一个特殊的问题,即 IIS7 决定为原本很小的网页加载大量内存。在每个请求中,它都会为进程添加 2 到 20MB 的内存,而我无法为我这样的人找出原因。我已经广泛寻找内存泄漏,但我似乎无法找到发生这种情况的地方。有没有人对我可以做些什么来隔离问题有一些建议?
我遇到了一个特殊的问题,即 IIS7 决定为原本很小的网页加载大量内存。在每个请求中,它都会为进程添加 2 到 20MB 的内存,而我无法为我这样的人找出原因。我已经广泛寻找内存泄漏,但我似乎无法找到发生这种情况的地方。有没有人对我可以做些什么来隔离问题有一些建议?
如果你不知道怎么做,找到内存的来源并不容易。(我也不...)
您可能想尝试看看是否可以找出导致此问题的代码:
您可能想阅读:Configuring Recycling Settings for an Application Pool (IIS 7)。
在您的情况下:达到请求限制时回收。
您需要的是内存分析器。一个好的内存分析器会审核您的 .NET 代码,它将指向对象以及代码中分配它们的位置,这些位置占用最多的内存。如果没有这样的工具,很难甚至不可能查明实际问题(想想几个小时或几天,而不是几周)。
你可以说所有的数据库连接都被关闭和处理掉了,但这是真的吗?您是否在所有一次性对象周围使用 using 语句(任何实现 IDisposable 的对象都可能泄漏资源,包括内存)?有一些代码审查工具可以帮助您为您分析代码(想想 ReSharper)。
一些分析器:
如果我没记错的话,我使用 YourKit 得到了最好的结果(它的开销最小,但这在实时服务器上仍然很重要)。.NET 还存在许多其他内存和性能分析器。
您是否尝试过使用任何 .NET 内存分析器?这可能比使用 WinDBG 跟踪内存分配的内容要少一些痛苦。