2010-02-23 25 views
5

Oto moja sytuacja. Chcę wyjaśnić, dlaczego tak się dzieje. Czytam o GC here, ale nadal nie rozumiem.Dlaczego wydaje mi się, że wyciek pamięci występuje podczas zbierania śmieci "Serwer" użytkownika?

przypadek Workstation: Kiedy biegnę z zbierania śmieci Workstation, moja aplikacja rampy do korzystania około 180MB prywatnych bajtów i około 70 MB w „.NET CLR #bytes pamięci w każdym hałdy”. Pamięć jest stabilna przez kilka godzin. Życie jest dobre.

przypadek serwera: Kiedy biegnę z zbierania śmieci serwer moje rampy aplikacji do korzystania około 500MB prywatnych bajtów, ale wciąż tylko około 70 MB w „.NET CLR #bytes pamięci w każdym hałdy”. Analiza wyników! DumpHeap -stat i! GCRoot pokazuje wiele obiektów bez korzeni. Poza tym moje prywatne bajty znacznie wzrastają w ciągu kilku godzin, ale bajty .NET pozostają niezmienne. Moja aplikacja używa dużo niezarządzanego kodu, więc myślę, że jest to związane z różnicą w bajtach prywatnych i .NET. Ale dlaczego moje życie jest tak złe w przypadku serwera?

Jakieś wskazówki lub wskazówki GC na temat dalszego dochodzenia?

Dzięki!

Odpowiedz

5

"Usuwanie śmieci serwera" jest przeznaczone do aplikacji o dużej przepustowości, głównie na serwerach klastrowych.

Serwer GC jest kosztowny i zawiesza działające wątki w trakcie jego działania. W związku z tym potrzeba więcej pamięci, zanim jeszcze się uruchomi - jeśli wciąż masz wolną pamięć, nie zdziw się, jeśli śmieciarz nie odczuwa potrzeby przejścia i czyszczenia.

Powiązane problemy