Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET内存泄漏奇怪的图表_Asp.net_.net_Asp.net Mvc - Fatal编程技术网

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

ASP.NET内存泄漏奇怪的图表,asp.net,.net,asp.net-mvc,Asp.net,.net,Asp.net Mvc,我试图诊断内存泄漏,我得到了一些奇怪的数字,也许有人能指出为什么我看到了我看到的 我执行的第一步是尝试查看泄漏发生的位置,在托管或非托管空间中 我分析了这个过程,得到了下面的图表 根据关于泄漏诊断的各种文档,我应该看到,要么私有字节跑掉,而“所有堆”没有跑掉(表示非托管泄漏),要么它们都并行跑掉,表示托管泄漏 看起来我确实有漏洞-(图表是CPU+专用字节+托管堆) 让我困惑的是——为什么我的托管堆在上午9点到下午5点之前只消耗大约30MB(但私有字节会增加),然后突然——我的托管堆激增到消耗3

我试图诊断内存泄漏,我得到了一些奇怪的数字,也许有人能指出为什么我看到了我看到的

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

我分析了这个过程,得到了下面的图表

根据关于泄漏诊断的各种文档,我应该看到,要么私有字节跑掉,而“所有堆”没有跑掉(表示非托管泄漏),要么它们都并行跑掉,表示托管泄漏

看起来我确实有漏洞-(图表是CPU+专用字节+托管堆)

让我困惑的是——为什么我的托管堆在上午9点到下午5点之前只消耗大约30MB(但私有字节会增加),然后突然——我的托管堆激增到消耗3 Gig

为什么会发生这种情况

更新:

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
654cf3d8 199671 6389472 System.Web.HttpCacheValidateHandler
719c25e8 559507 6714084系统对象
654b82e8 95499 6875928 System.Web.HttpServerVarsCollection
05e90a24 253641 7101948 System.Web.Mvc.NameValueCollectionValueProvider+ValueProviderResultPlaceholder+c__DisplayClass8
654e42e4 97208 7776640 System.Web.HttpWriter
04c2a5c8 2648028473664 Castle.MicroKernel.ResponderReleaseDelegate
04c2ab68 264813 9533268 Castle.MicroKernel.bundle
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+插槽[[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系统。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系统。字节[]
70d45bec 9064979 145039664 System.Collections.Specialized.NameObjectCollectionBase+NameObjectEntry
719afe88 5391401 175028320系统。对象[]
719c5ed4 919078 237147240系统.集合.哈希表+bucket[]
719c2248 7055089 454532758系统字符串
好的,我在崩溃转储(!dumpheap-live-stat)上运行了windbg,我发现有很多与Http上下文相关的对象,它们仍然保存在内存中(事实上,在一个典型的工作日之后是98000个)

谁能证实。。。我不应该看到这个,对吗?日志中有97208次出现的类型-这意味着HttpRequest/HttpResponse等被保存在内存中,导致大量泄漏。
这可能是什么原因造成的?我知道它们没有存储在会话中。我的会话设置为默认超时,检查时,它只包含3个小字符串对象。

解决了这个问题。运行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

它看起来像是
System.Collections.Hashtable
的许多实例。它可以是一个静态变量。这些不适用于特定的连接。您如何“告诉Castle释放它?”我们遇到了相同的问题。@JMDenver这完全取决于您如何劫持应用程序中的依赖项解析基础结构。例如,我们使用System.Web.Mvc.ControllerBuilder用我们自己的“WindsorController工厂”覆盖控制器工厂。在这里面(在控制器解析期间),我们只需确保连接到HttpRequestMessage.RegisterForDispose,我们将其委托给容器的释放方法。