Dziwne użycie pamięci w systemie Windows Server 2008 R2

20

Mam nadzieję, że ktoś może pomóc. Mamy maszynę z systemem Windows Server 2008 R2 z 16 GB pamięci RAM, która ciągle zużywa całą dostępną pamięć. Nic w Menedżerze zadań lub Monitorze zasobów nie ujawnia żadnego procesu używającego pamięci powyżej 300 MB ... ale użycie pamięci na serwerze wynosi 15,7 GB.

https://i784.photobucket.com/albums/yy129/ThunderPeel2001/ram-usage.gif

Jedyne działające rzeczy to SQL Server 2008 i IIS7.5 (z ASP.Net).

Uwaga: Zużycie pamięci RAM po ponownym uruchomieniu zaczyna się od niskiego poziomu i rośnie. Po około tygodniu wciąż znajdujemy się w tej sytuacji.

Jak mogę odkryć, co zjada całą naszą pamięć? :(

Django Reinhardt
źródło
1
W jaki sposób dokładnie „po ograniczeniu użycia pamięci RAM programu SQL Server (min / max) do 13 GB, to nie powinno się powtórzyć”. Korzystam z komputera z systemem Windows 2008 R2 z SQL 2008 R2 i mam ten sam problem.
To ustawienie w SQL Server Studio. Powodzenia!
Django Reinhardt
1
@ user72232: msdn.microsoft.com/en-us/library/ms178067.aspx
Tim Schmelter

Odpowiedzi:

15

Czy to serwer 64-bitowy - czy masz włączone blokady stron w lokalnych zasadach pamięci? SQL prawdopodobnie zajmuje resztę pamięci Jeśli spojrzysz na liczniki perfmon, zobaczysz przydział pamięci

Oto artykuł, który szczegółowo to wyjaśnia

Możesz także wyświetlić liczniki w SQL

SELECT
    object_name
   ,Counter_name
   ,cntr_value
   ,ROUND(( cntr_value * 8192.0 ) / 1048576, 0) AS cntr_value_MB
FROM
    sys.dm_os_performance_counters
WHERE
    object_Name LIKE '%Buffer Manager%'
    AND RTRIM(counter_name) IN ( 'Free pages', 'Total pages',
                                 'Database pages' ) 
UNION SELECT
    object_name
   ,Counter_name
   ,cntr_value
   ,ROUND(( cntr_value / 1024 ), 0) AS cntr_value_MB
FROM
    sys.dm_os_performance_counters
WHERE
    counter_name IN ( 'Target Server Memory (KB)',
                      'Total Server Memory (KB)' )
CPU_BUSY
źródło
2
To wszystko wyjaśnia. Wykorzystanie pamięci to „użyj całej dostępnej” (tj. 2000 TB), a strony były zablokowane w pamięci RAM, więc nie wszystko miało do niej dostęp, gdy była w użyciu. Po ograniczeniu użycia pamięci RAM programu SQL Server (min / max) do 13 GB, to nie powinno się powtórzyć. Mam teraz do dyspozycji kilka narzędzi do śledzenia zmian. Dzięki za pomoc!
Django Reinhardt
>> Teraz mam też kilka narzędzi do śledzenia zmian - Jakich narzędzi używałeś?
David Christiansen,
6

Szybki test: zrestartuj SQL Server.
Kolejny szybki test: uruchom ponownie IIS.

Na pewno będziesz wiedzieć, czy jeden z nich jest winowajcą, czy też musisz szukać gdzie indziej.

Massimo
źródło
Wygląda na to, że SQL był winowajcą!
Django Reinhardt
3

Pomocne może być użycie RamMap, aby zobaczyć, dokąd zmierza twoja pamięć.

Siergiej
źródło
1

Czy rzeczywiście masz jakiś problem związany z pamięcią?

Czy użycie pamięci kiedykolwiek staje się wyższe niż faktycznie zainstalowana pamięć, czy po prostu zapełnia się i pozostaje tam?

Jeśli pamięć się zapełnia, ale nie występują żadne problemy, oznacza to, że pamięć podręczna wykonuje swoją pracę; Pamięć zostanie automatycznie realeased czy i kiedy będziesz rzeczywiście potrzebują.

Jeśli użycie pamięci przekroczy fizyczny limit, a serwer zatrzyma się, oznacza to, że występuje przeciek pamięci i zdecydowanie należy go debugować.

Kilka interesujących artykułów na temat „pamięci podręcznej”:

http://blogs.msdn.com/ntdebugging/archive/2007/11/27/too-much-cache.aspx
http://blogs.msdn.com/ntdebugging/archive/2007/10/10/the-memory -shell-game.aspx
http://blogs.msdn.com/ntdebugging/archive/2009/02/06/microsoft-windows-dynamic-cache-service.aspx

Massimo
źródło
Nie mogliśmy zainstalować żadnych krytycznych aktualizacji systemu Windows bez resetu serwera, ponieważ wciąż brakowało mu pamięci RAM. Całkiem śmieszne. Cokolwiek go używało, nie chciałem go oddawać.
Django Reinhardt
0

czy sprawdziłeś Perfmon (w szczególności liczniki SQL), jak sugeruje ktoś z twojego innego wątku?

mfinni
źródło
1
Tak, ale „kontrola Perfmon” jest bardziej skomplikowana niż się wydaje.
Django Reinhardt
0

Pierwszą rzeczą jest, jak powiedziano wcześniej, załatanie go i sprawdzenie, czy to rozwiąże problem.

Po drugie, jeśli to nie zadziała, skorzystaj z Eksploratora procesów, aby lepiej sprawdzić zużycie pamięci. Przejdź do menu Widok, a następnie Wybierz kolumny, Przetwarzaj pamięć i sprawdź opcje Bajty prywatne, Rozmiar wirtualny i Rozmiar zestawu roboczego. Sprawdź, czy to wskazuje na winę.

Drastycznym podejściem byłaby wówczas próba zatrzymania usług. Na przykład usługi IIS mogą być całkowitą świnią pamięci, jeśli masz źle skonfigurowane pule aplikacji i ogrody internetowe (zbyt wiele), więc jest to kandydat.

Powodzenia!

Maximus Minimus
źródło