Objawy
Występują problemy z wydajnością aplikacji i usług w różnych wersjach systemów Windows XP, Windows Vista, Windows Server 2003, Windows Server 2008 i Windows Server 2008 R2. Ponadto można zauważyć następujące objawy:
- Dostępna pamięć jest prawie wyczerpana.
- Pamięć podręczna plików systemowych zużywa większość fizycznej pamięci RAM.
- W pamięci podręcznej występuje duża liczba żądań odczytu wysyłanych na dysk twardy.
Przyczyna
Zarządzanie pamięcią w systemach operacyjnych Microsoft Windows wykorzystuje algorytm oparty na zapotrzebowaniu. Jeśli jakikolwiek proces wymaga dużej ilości pamięci i używa jej, zwiększa się rozmiar zestawu roboczego (liczba stron pamięci w fizycznej pamięci RAM) procesu. Jeśli żądania te są ciągłe i niezaznaczone, zestaw roboczy procesu rozrasta się, zajmując całą fizyczną pamięć RAM. W takiej sytuacji zestawy robocze dla wszystkich innych procesów są stronicowane na dysk twardy. Takie zachowanie powoduje zmniejszenie wydajności aplikacji i usług, ponieważ strony pamięci są stale zapisywane na dysku twardym i odczytywane z dysku twardego.
To zachowanie dotyczy również zestawu roboczego pamięci podręcznej plików systemowych. W przypadku ciągłego i dużej liczby żądań odczytu w pamięci podręcznej pochodzących z dowolnego procesu lub ze sterownika rozmiar zestawu roboczego pamięci podręcznej plików systemowych zostanie zwiększony, aby sprostać temu zapotrzebowaniu. Pamięć podręczna plików systemowych zużywa fizyczną pamięć RAM. Dlatego nie ma wystarczającej ilości fizycznej pamięci RAM dla innych procesów.
W 32-bitowych wersjach systemów operacyjnych Microsoft Windows starszych niż Windows Vista teoretyczny limit pamięci podręcznej plików systemowych jest mniejszy niż 1 gigabajt (GB). Ograniczenie zakresu adresów wirtualnych uniemożliwia zestawom roboczym pamięci podręcznej plików systemowych wyczerpanie fizycznej pamięci RAM.
W 32-bitowych wersjach systemów operacyjnych Windows Vista zasoby jądra są przydzielane dynamicznie. Zestaw roboczy pamięci podręcznej plików systemowych zwiększa się, aby zużywać zakres adresów wirtualnych trybu jądra kosztem innych zasobów jądra. Ograniczenie tego zakresu pamięci jest mniejsze niż 2 GB. Jeśli komputer ma więcej niż 2 GB fizycznej pamięci RAM, pamięć podręczna nie może wyczerpać całej fizycznej pamięci RAM. Jednak pamięć podręczna może wyczerpać wirtualną przestrzeń adresową w jądrze. Może to spowodować błędy alokacji dla innych składników jądra.
W 64-bitowych wersjach systemów operacyjnych Windows rozmiar zakresu adresów wirtualnych jest zazwyczaj większy niż fizyczna pamięć RAM. W takiej sytuacji zestaw roboczy pamięci podręcznej plików systemowych może się zwiększyć, zużywając większość fizycznej pamięci RAM.
Rozwiązanie
Algorytmy zarządzania pamięcią w systemach operacyjnych Windows 7 i Windows Server 2008 R2 zostały zaktualizowane w celu rozwiązania wielu problemów z buforowaniem plików występujących we wcześniejszych wersjach systemu Windows. Tylko w niektórych wyjątkowych sytuacjach należy zaimplementować tę usługę na komputerach z systemem Windows 7 lub Windows Server 2008 R2.
Jak ustalić, czy problem dotyczy Twojego systemu
Aby ustalić, czy ten problem dotyczy Twojego systemu, zainstaluj narzędzie SysInternals RamMap. Narzędzie to można pobrać z następującej witryny Windows Sysinternals w sieci Web:
http://technet.microsoft.com/en-us/sysinternals/ff700229
Po uruchomieniu narzędzia wybierz opcję Użyj zliczeń . Spowoduje to wyświetlenie kilku kolumn pokazujących bieżący wzorzec użycia pamięci. Kliknij kolumnę Aktywne , aby posortować dane według liczby używanych bajtów, i odnotować największe użycie bezpośrednio pod sumą.
Jeśli największą liczbą użyć jest "Metaplik" i używana jest duża część dostępnej pamięci, oznacza to, że występuje problem z pamięcią podręczną plików systemowych opisany w sekcji "Objawy". Można to sprawdzić, monitorując za pomocą monitora wydajności licznik bajtów rezydentnych pamięci\pamięci podręcznej systemu, aby obserwować stały wzrost pamięci podręcznej w czasie.
Rysunek 1. Przykładowe dane wyjściowe RamMap, w których występuje problem na komputerze.
Rysunek 2. Przykładowe dane wyjściowe RamMap, w których komputer nie ma problemu.
Jeśli licznik bajtów rezydentnych pamięci podręcznej systemu w monitorze wydajności wykazuje tendencję wzrostową w czasie, oznacza to, że problem występuje na komputerze, jak pokazano na rysunku 3.
Rysunek 3. Przykładowe dane wyjściowe monitora wydajności, w których komputer napotyka problem w czasie.
Wymagania dotyczące ponownego uruchamiania
Podczas instalowania, odinstalowywania lub używania tej usługi nie jest wymagane ponowne uruchomienie komputera.
Jeśli czytasz ten artykuł, ponieważ pracujesz z klientem, który uważa, że ten problem go dotyczy, wykonaj poniższe kroki, aby pomóc w rozwiązaniu tego problemu.
Sprawdź, czy dane wyjściowe RamMap, perfmon lub poolmon klienta potwierdzają, że pamięć podręczna plików systemowych zużywa większość fizycznej pamięci RAM w sposób opisany wcześniej.
Aby uzyskać usługę dynamicznej pamięci podręcznej systemu Windows, pobierz ją tutaj.
Niektóre ustawienia rejestru pamięci podręcznej dynamicznej są następujące:
Serwery plików, możesz spróbować 1GB.
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DynCache\Parameters]
"MaxSystemCacheMBytes"=dword:00000400
"MinSystemCacheMBytes"=dword:00000064
"SampleIntervalSecs"=dword:0000003c
"CacheUpdateThresholdMBytes"=dword:000000642007, warto wypróbować 500 MB:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DynCache\Parameters]
"MaxSystemCacheMBytes"=dword:000001F4
"MinSystemCacheMBytes"=dword:00000064
"SampleIntervalSecs"=dword:0000003c
"CacheUpdateThresholdMBytes"=dword:00000064SQL 2005 i nowsze wersje, w przeszłości podczas pracy z SQL EE, używały 2 GB:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DynCache\Parameters]
"MaxSystemCacheMBytes"=dword:000007D0
"MinSystemCacheMBytes"=dword:00000064
"SampleIntervalSecs"=dword:0000003c
"CacheUpdateThresholdMBytes"=dword:00000064
Więcej informacji
Aby obejść ten problem, użyj funkcji interfejsu API GetSystemFileCacheSize i funkcji interfejsu API SetSystemFileCacheSize, aby ustawić maksymalną lub minimalną wartość rozmiaru zestawów roboczych pamięci podręcznej plików systemowych. Użycie tych funkcji jest jedyną obsługiwaną metodą ograniczenia zużycia pamięci fizycznej przez pamięć podręczną plików systemowych.
Usługa dynamicznej pamięci podręcznej systemu Microsoft Windows to przykładowa usługa, która demonstruje jedną ze strategii użycia tych interfejsów API w celu zminimalizowania skutków tego problemu.
Zainstalowanie i używanie usługi dynamicznej pamięci podręcznej firmy Microsoft nie powoduje wyłączenia wsparcia dla systemu Microsoft Windows. Ta usługa i jej kod źródłowy są podane jako przykład użycia obsługiwanych przez firmę Microsoft interfejsów API w celu zmniejszenia rozrostu pamięci podręcznej systemu plików.
Usługę i kod źródłowy można uzyskać z następującej witryny firmy Microsoft w sieci Web:
Dodatkowe zasoby
Przeczytaj rozdziały 9 (Zarządzanie pamięcią) i 10 (Menedżer pamięci podręcznej) w 5. edycji wewnętrznej systemu Windows.
ZARZĄDZANIE PAMIĘCIĄ (PROBLEMY Z DUŻĄ PAMIĘCIĄ PODRĘCZNĄ SYSTEMU) Wpis w blogu
Powolne problemy z kopiowaniem dużych plików — wpis w blogu
Ograniczenia pamięci dotyczące poszczególnych wersji systemu Windows
976618 Problemy z wydajnością w aplikacjach i usługach pojawiają się, gdy pamięć podręczna plików systemowych zużywa większość fizycznej pamięci RAM
918483 Jak ograniczyć stronicowanie pamięci puli buforów w 64-bitowej wersji SQL Server
895932 Co należy wziąć pod uwagę przed włączeniem trybu pamięci podręcznej systemu w systemie Windows XP
232271 Jak zoptymalizować serwer systemu Windows NT przy użyciu rejestru
837331 Menedżer pamięci podręcznej w Windows Server 2003 — informacje
http://technet2.microsoft.com/windowsserver/en/library/EFA621BD-A031-4461-9E72-59197A7507B61033.mspx
Temat LargeSystemCache w witrynie TechNet
Stan
Firma Microsoft potwierdziła, że jest to problem dotyczący produktów firmy Microsoft wymienionych w sekcji „Dotyczy”.