Ten problem prowadzi do kłującego problemu z naszą aplikacją internetową. (Serwer Asp.net 2.0 Win 2008)Obiekt nie jest zbiorem śmieci, ale nie zawiera elementów gcroot
Nasze wykorzystanie pamięci dla strony internetowej rośnie i rośnie, chociaż spodziewam się, że pozostanie na dość statycznym poziomie. (Mamy niewielką ilość danych, które są przechowywane w stanie).
Chcąc dowiedzieć się, na czym polega problem, uruchomiłem System.GC.Collect(); kilka razy, wziął zrzut pamięci, a następnie załadował ten zrzut pamięci do WinDbg.
Kiedy robię DumpHeap -Stat, otrzymuję niezmiernie dużą liczbę na konkretnym typie, zawieszoną w pamięci.
0000064280580b40 713471 79908752 PaymentOption
tak, robi DumpHeap -MT dla tego typu, mam stos odniesień do obiektu. Wybierając ich losową liczbę, robię a! Gcroot, a polecenie wraca, informując, że nie ma do nich żadnych odniesień.
Dla mnie to właśnie wtedy GC powinien zbierać te przedmioty, ale z jakiegoś powodu zostały one zaległe.
Czy ktoś może wyjaśnić, co może się wydarzyć?
Chciałbym zobaczyć, czy kiedykolwiek to rozwiązałeś ... – womp
Niestety nie. Doszliśmy do obejścia tego problemu, recyklingując proces, gdy użyjemy więcej niż nGB pamięci, co pozwoliło na inne procesy. Podejrzewam, że jest to problem z fragmentacją i nowym przydziałem pamięci. Wkrótce przeprowadzę dalsze dochodzenie, więc opublikuję aktualizację. – Lachmania