WinDbg - глядя на ResultCache System.Web.Compilation.BuildManager - PullRequest
2 голосов
/ 07 февраля 2011

Я отлаживаю утечку памяти.Я не могу воспроизвести его, но когда программа работает в определенных обстоятельствах, я получаю устойчивую утечку со скоростью около 60 МБ / час.Через несколько дней я делаю дамп, когда размер кучи составляет ~ 2 ГБ, и присоединяю WinDbg.

! Heapdump –stat
Показывает, что существует Hashtables на 1,2 ГБ.Это около 55% кучи.

! Dumpheap -Type System.Collections.Hashtable + KeyCollection
Дает адрес 153 080 экземпляров Hashtable.

! Gcroot некоторых из этихэкземпляры указывают, что все они принадлежат потокам, принадлежащим Me.Logger.

RSP:28f67e840:Root:0000000245edb7d0(Me.Logger)->
0000000245edb9d8(System.Threading.Thread)->
00000002459b9830(System.Runtime.Remoting.Contexts.Context)->
00000002459b9548(System.AppDomain)->
0000000245a1fed0(System.ResolveEventHandler)->
00000002259697a0(System.Web.Compilation.BuildManager)->
0000000245a20120(System.Web.Compilation.MemoryBuildResultCache)->
00000002459c2a48(System.Web.Caching.CacheMultiple)->
00000002459c2a70(System.Object[])->
00000002459c7e08(System.Web.Caching.CacheSingle)->
00000002459c9008(System.Web.Caching.CacheUsage)->
00000002459c9030(System.Object[])->
00000002459c9138(System.Web.Caching.UsageBucket)->
00000001b996fba8(System.Web.Caching.UsagePage[])->
00000001ae054388(System.Web.Caching.UsageEntry[])->
0000000251576590(System.Web.Caching.CacheEntry)->
00000002515761a0(System.Web.Mobile.MobileCapabilities)->
00000002515742c8(System.Collections.Hashtable)->
0000000251576548(System.Collections.Hashtable+KeyCollection)

Я не знаю, как интерпретировать этот вывод.Похоже, что System.Web.Compilation.BuildManager просто имеет большой кэш.

BuildManager, MobileCapabilities, ResolveEventHandler - я не использую ничего из этого в своей кодовой базе.

Я новичок в WinDbg.Как мне отладить это дальше?

Как я могу увидеть, что в Hashtables?(SoS v2.0.50727, так что нет! DumpCollection).Как я могу увидеть, что построил BuildManager?

1 Ответ

0 голосов
/ 08 марта 2011

Вы пробовали расширение SOSEX? http://www.stevestechspot.com/default.aspx. Он обладает большей частью функциональности SOS, включая необходимую вам команду ! DumpCollection (хотя я не проверял, работает ли она с V2 CLR) и, возможно, некоторые другие полезные вещи.

Также, возможно, этот блог может помочь вам, у нее есть довольно хорошая информация об отладке управляемой утечки памяти:

http://blogs.msdn.com/b/tess/archive/2008/04/03/net-debugging-demos-lab-7-memory-leak-review.aspx?PageIndex=1

...