ASP.NET内存泄漏奇怪的图表

时间:2014-03-26 03:43:44

标签: asp.net .net asp.net-mvc

我正在尝试诊断内存泄漏,我得到一些奇怪的数字,或许有人可以指出为什么我看到我所看到的。

我执行的第一步是尝试在托管或非托管空间中查看泄漏发生的位置。

我描述了这个过程,得到了下面的图表

enter image description here

根据有关泄漏诊断的各种文档,我应该看到,私有字节跑掉而“所有堆”没有(表示非托管泄漏)或者它们都并行逃跑,表明是受管理的。

看来我确实有泄漏 - (图表是CPU +私有字节+托管堆)。

让我感到困惑的是 - 为什么我的托管堆在上午9点到下午5点之间只消耗大约30MB(但私有字节增长),然后突然间 - BOOM我的托管堆跳到3演出?

为什么会发生这种情况?

更新:

654cf3d8   199671      6389472 System.Web.HttpCacheValidateHandler
719c25e8   559507      6714084 System.Object
654b82e8    95499      6875928 System.Web.HttpServerVarsCollection
05e90a24   253641      7101948 System.Web.Mvc.NameValueCollectionValueProvider+ValueProviderResultPlaceholder+<>c__DisplayClass8
654e42e4    97208      7776640 System.Web.HttpWriter
04c2a5c8   264802      8473664 Castle.MicroKernel.BurdenReleaseDelegate
04c2ab68   264813      9533268 Castle.MicroKernel.Burden
06bde0a8   507282     10145640 System.Lazy`1[[System.Web.Mvc.ValueProviderResult, System.Web.Mvc]]
6fb5348c   267697     10707880 System.Collections.Generic.HashSet`1[[System.String, mscorlib]]
654e9388   160209     11535048 System.Web.HttpHeaderCollection
654ad44c   194416     12442624 System.Web.HttpCookieCollection
6fd1abbc   170480     14202840 System.Collections.Generic.HashSet`1+Slot[[System.String, mscorlib]][]
654b2204    95203     15613292 System.Web.HttpCachePolicy
06bde010   507282     16233024 System.Func`1[[System.Web.Mvc.ValueProviderResult, System.Web.Mvc]]
719c3a6c   469961     18106904 System.Int32[]
654e87e4    97208     18275104 System.Web.Hosting.IIS7WorkerRequest
654e2590    97208     19441600 System.Web.HttpRequest
654e285c    97208     19830432 System.Web.HttpResponse
715fbc80   422170     20264160 System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]]
654e2160    97208     23329920 System.Web.HttpContext
654e9614   388836     23330160 System.Web.HttpValueCollection
719c45c8   919071     47791692 System.Collections.Hashtable
654d5220  4808083    115393992 System.Web.HttpServerVarsCollectionEntry
719bfc20  4849839    116396136 System.Collections.ArrayList
719c4584   105080    119191278 System.Byte[]
70d45bec  9064979    145039664 System.Collections.Specialized.NameObjectCollectionBase+NameObjectEntry
719afe88  5391401    175028320 System.Object[]
719c5ed4   919078    237147240 System.Collections.Hashtable+bucket[]
719c2248  7055089    454532758 System.String

好的,所以我在崩溃转储上运行了windbg,(!dumpheap -live -stat)我发现有很多与Http上下文有关的对象,它们仍然保存在内存中(98,000之后)事实上一个典型的工作日。)

任何人都可以确认......我不应该看到这个吗?在日志中有类型出现97,208次 - 这意味着HttpRequest / HttpResponse等被保存在内存中,导致ALOT泄漏。 可能是什么导致了这个?我知道它们没有被存储在会话中。我的会话被设置为默认超时,并且在检查时,它只包含3个小字符串对象。

1 个答案:

答案 0 :(得分:1)

想出来。运行GCroot突出显示了该问题。了解参考列表中的Castle.MicroKernel.Releasers.LifecycledComponentsReleasePolicy如何?

在请求完成后,没有告诉Castle释放控制器。神秘解决了。

0:000> !gcroot 95963d2c
HandleTable:
    00bb12f0 (pinned handle)
    -> 03062490 System.Object[]
    -> 021501dc Castle.Windsor.WindsorContainer
    -> 02150200 Castle.MicroKernel.DefaultKernel
    -> 02150304 System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[Castle.MicroKernel.ISubSystem, Castle.Windsor]]
    -> 02150af8 System.Collections.Generic.Dictionary`2+Entry[[System.String, mscorlib],[Castle.MicroKernel.ISubSystem, Castle.Windsor]][]
    -> 02150b74 Castle.Windsor.Diagnostics.DefaultDiagnosticsSubSystem
    -> 02150b8c System.Collections.Generic.List`1[[Castle.Windsor.Diagnostics.IContainerDebuggerExtension, Castle.Windsor]]
    -> 02150d00 System.Object[]
    -> 02150d30 Castle.Windsor.Diagnostics.Extensions.ReleasePolicyTrackedObjects
    -> 02150d3c Castle.Windsor.Diagnostics.TrackedComponentsDiagnostic
    -> 02150e04 System.EventHandler`1[[Castle.Windsor.Diagnostics.TrackedInstancesEventArgs, Castle.Windsor]]
    -> 02150d54 Castle.MicroKernel.Releasers.LifecycledComponentsReleasePolicy
    -> 02150d84 System.Collections.Generic.Dictionary`2[[System.Object, mscorlib],[Castle.MicroKernel.Burden, Castle.Windsor]]
    -> 038da530 System.Collections.Generic.Dictionary`2+Entry[[System.Object, mscorlib],[Castle.MicroKernel.Burden, Castle.Windsor]][]
    -> 9596f3a4 WebController
    -> 9596f9cc System.Web.Mvc.ControllerContext
    -> 95965b5c System.Web.HttpContextWrapper
    -> 95964078 System.Web.HttpContext
    -> 95963d2c System.Web.Hosting.IIS7WorkerRequest