Windows Server 2008 R2 64-bit przeciek pamięci

12

Mam problem z jednym z serwerów biurowych. Jest to zwirtualizowany serwer Windows 2008 R2 z 6 GB pamięci RAM. Ma tylko Microsoft SQL Server (pamięć przypisana maksymalnie = 3 GB) i tylko oprogramowanie, które nie zużywa więcej niż 1 GB pamięci RAM. Jednak pamięć RAM serwera jest prawie pełna i wydaje się, że patrząc na procesy w menedżerze zadań, nie podsumowuje tego. Zainstalowałem RamMap, ale nie mogę go łatwo zinterpretować, czy jest jakaś „wysoka wartość”, którą można zidentyfikować?

wprowadź opis zdjęcia tutaj

Guillermo Zooby
źródło
1
Sortowanie według „Total” lub „Active” uczyniłoby odpowiedź dość oczywistą.
Dmitrij Grigoriew

Odpowiedzi:

18

Widzę ~ 3,2 gigabajta pamięci Driver Locked, która natychmiast wyróżnia się jako podejrzana.

Ten rodzaj pamięci, Driver Locked memory, to pamięć, która została zablokowana przez sterownik trybu jądra. Zwykle w celu przesyłania niewielkich ilości danych, zwykle na krótki czas.

Jeśli więc masz dużą część pamięci zablokowanej przez kierowcę, przez długi czas zwykle jest to znak, że coś jest nie tak.

Spróbuję tutaj zgadywać i domyślam się, że skoro wspomniałeś, że jest to zwirtualizowany serwer, to robi to sterownik balonu VMware. Nie mam wystarczającej ilości danych, aby móc wyjaśnić, dlaczego tak się dzieje, ale istnieje wiele przypadków i KB-ów obsługujących VMware, takich jak ten , które konkretnie mówią o tym , że sterownik balonu błędnie zachowuje dużą ilość pamięci, gdy nie powinien t być.

Musisz także wziąć pod uwagę możliwość, że sterownik balonu zachowuje się zgodnie z przeznaczeniem, i próbuje zmusić serwer do zapełnienia pamięci, ponieważ desperacko musi przekazać pamięć innej maszynie wirtualnej na tym samym hoście.

Istnieje jeszcze inna możliwość, że nie jest to wcale dynamiczny sterownik pamięci hiperwizora, ale tylko jakiś nieuczciwy sterownik urządzenia.

Sterowniki zwykle przydzielają pamięć, która jest „oznaczona” za pomocą 3 lub 4-znakowego znacznika, który daje wskazówkę, który sterownik był odpowiedzialny za dokonanie przydziału.
poolmon.exe, część zestawu Windows SDK / DDK, może pomóc w zdiagnozowaniu.

Jak powiedziałem, zgaduję, ale to najlepsze, co mogę zrobić z danymi, które mam.

Ryan Ries
źródło
16

Cóż, mam każdą możliwą do wyobrażenia wersję SQL Server lokalnie, od 2005 do 2016 roku, i nie widziałem żadnych wycieków pamięci tak dużych, jak 100% faktycznie używanej pamięci. Sprawdź, czy masz włączoną pamięć dynamiczną dla maszyny wirtualnej .

Driver Lockedto postać, na której powinieneś się skoncentrować. W twoim konkretnym przypadku Driver Lockedjest to prawdopodobnie jeden ze sterowników Hyper-V, który zablokował całą nieużywaną pamięć (przypisaną do maszyny wirtualnej, ale nieużywaną przez bankomat), dzięki czemu może „dać” ją innej maszynie wirtualnej skonfigurowanej z pamięcią dynamiczną, a nawet system operacyjny hosta, w zależności od tego, który jest aktualnie potrzebny. Możesz to przetestować, otwierając dużą maszynę lub aplikację wymagającą dużej ilości pamięci w maszynie wirtualnej - pamięć DriverLocked powinna się zmniejszyć wraz ze wzrostem niektórych innych parametrów. IMHO nie powinno być powodem do niepokoju, jeśli nie przepełniłeś zbyt wiele pamięci na wszystkich maszynach wirtualnych.

Kitet
źródło
5
Pokonałem cię przez około 8 sekund ... witamy w Server Fault. :)
Ryan Ries
Rzeczywiście :-)
Kitet