Zmniejszyć użycie pamięci „Metaplik”?

8

Mój komputer służbowy (Windows 7 64-bit) spędza dużo czasu na wymianie pamięci podczas przełączania programów. Zaskakuje mnie to, ponieważ mam 4 GB pamięci RAM, a programy, których używam, nie są szczególnie głodne pamięci RAM (Outlook, Emacs, p4win, Firefox, różne narzędzia do budowania). Pobrałem RAMMap , i to widać na gigabajt pamięci używanej przez „Metafile”.

Z bloga Sysinternals :

Metaplik jest częścią pamięci podręcznej systemu i składa się z metadanych NTFS. Metadane NTFS obejmują MFT, a także inne różne pliki metadanych NTFS. ... W MFT każdy rekord atrybutu pliku zajmuje 1k, a każdy plik ma co najmniej jeden rekord atrybutu. Dodaj do tego inne pliki metadanych NTFS, a zobaczysz, dlaczego kategoria Metaplików może rosnąć dość duża na serwerach z dużą ilością plików.

Rozumiem więc, czym są dane „Metapliku” ... Pracuję na dużych kompilacjach zawierających setki tysięcy plików (żaden nie jest taki duży, ale sumują się do kilku gigabajtów). Moje pytanie brzmi: jak mogę zmniejszyć ilość pamięci używanej przez „Metafile”? Nie używam wszystkich tych plików jednocześnie, więc dlaczego system Windows musi przechowywać informacje w pamięci RAM? Ponowne uruchamianie komputera za każdym razem, gdy synchronizuję nową kompilację, jest naprawdę denerwujące.

Jay Conrod
źródło
4
Kompilacje są intensywne we / wy, dlatego system Windows przechowuje dużą pamięć podręczną systemu plików w celu poprawy wydajności. Niestety narzędzia do budowania również zużywają dużo pamięci i zwykle w dużych skokach, co prawdopodobnie powoduje zalanie. Ponieważ konkuruje z pamięcią podręczną systemu. Najlepszym rozwiązaniem może być dodanie większej ilości pamięci.
tgiphil 17.01.11
@tgiphil, Zrozumiałe jest, że podczas sprawdzania lub tworzenia kompilacji używana jest duża pamięć. Jednak nadal jest używany i nadal powoduje druzgocenie znacznie później, gdy pracuję na małym obszarze. Niestety IT nie da mi więcej pamięci.
Jay Conrod,
Myślę, że Windows 7 już optymalizuje wydajność dzięki buforowaniu. Aby zwiększyć dostępną pamięć i zmniejszyć liczbę wymian, zamknij niepotrzebne aplikacje. Możesz odzyskać sporo pamięci, zamykając na przykład Outlooka i Firefoksa. Jeśli używasz Visual Studio i potrzebujesz tylko skompilować, spróbuj zamiast tego zbudować linię poleceń. Mam nadzieję, że to pomoże. BTW. Przy tak niskiej pamięci (6 Gb poniżej 100 USD) jest to doskonała inwestycja produktywności.
tgiphil 18.01.11

Odpowiedzi:

4

Uważam, że pamięć podręczna systemu zwalnia pamięć w razie potrzeby, ale mogą się zdarzyć usterki. Poniżej wymieniono niektóre możliwości.

Twój 64-bitowy system przydziela pamięć wideo w pierwszych 4 GB pamięci. Jeśli więc karta wideo ma dużo pamięci, pamięć ta jest tracona, jak opisano w:
Pamięć użyteczna może być mniejsza niż pamięć zainstalowana na komputerach z systemem Windows 7

Możesz sprawdzić użycie pamięci na komputerze, otwierając Menedżera urządzeń i pod menu Widok wybierz „Zasoby według połączenia”. Rozwiń węzeł Pamięć i sprawdź, czy możesz dowiedzieć się, co zajmuje pamięć. W niektórych przypadkach pamięć można zwiększyć, wyłączając nieużywane urządzenia, takie jak firewire.

Możesz także spróbować wykonać dokładnie odwrotność tego, co opisano w tym artykule:
Zwiększ rozmiar pamięci podręcznej pamięci systemu plików w systemie Windows 7

Możesz także spróbować wyłączyć Windows 7 SuperFetch .

Jeśli nic nie pomoże, warto opublikować zrzut ekranu karty Menedżer zadań o nazwie Wydajność.

harrymc
źródło
+1 odnosi się do „Wyłącz Superpobierz”.
Brak negatywnej oceny, ale Superfetch najprawdopodobniej zwiększa jego wydajność - nie zmniejszając jej - ponieważ pliki wykonywalne kompilacji są generalnie wykonywane często i skorzystają z buforowania. Jeśli chodzi o kartę graficzną mającą wpływ na dostępną pamięć, nie ma ona zastosowania w systemie Windows 7 64bit z jedynie 4 Gb. W takim przypadku karta graficzna zostałaby zmapowana powyżej 4 Gb.
tgiphil 18.01.11
@tgiphil: Z cytowanego powyżej artykułu Microsoft: „karta graficzna z 256 MB wbudowanej pamięci, pamięć ta musi zostać zmapowana w pierwszych 4 GB przestrzeni adresowej”.
harrymc 18.01.11
W mojej organizacji mamy też mnóstwo małych plików i ogromny metaplik NTFS w pamięci RAM. Z tego co wiem, Windows nie buforuje Metapliku jak wszystko inne i nigdy tak naprawdę nie zwalnia go z pamięci RAM. Komputer zwiększy zużycie pamięci do 100%, a następnie wszystkie aplikacje zaczną się zawieszać z powodu braku pamięci. Oczywiście to nie jest Windows 7, to Windows Server 2008 R2.
Phil
Również link „Zwiększ pamięć podręczną systemu plików” informuje o rzeczach, które w rzeczywistości nie działają. Zobacz tweakhound.com/blog/?p=1164
Phil
0

W systemie Windows Server 2008 R2 występuje dokładnie ten sam problem z pamięcią podręczną metapliku, że zbyt dużo informacji o metapliku jest przechowywanych w aktywnej pamięci, więc funkcje pamięci podręcznej nie mają uprawnień do zezwolenia na zwolnienie tej pamięci, gdy występuje presja pamięci.

Napisałem skrypt PowerShell na stronie serverfault.com Wykorzystanie pamięci RAM metapliku systemu Windows Server 2008 R2, które ustawia maksymalną aktywną pamięć metapliku na coś rozsądnego. Reszta jest przenoszona do pamięci rezerwowej, a normalne funkcje pamięci podręcznej są w stanie odpowiednio priorytetyzować rzeczy. Zarówno Windows 7 x64, jak i Server 2008 R2 x64 mają domyślne maksymalne limity aktywnej pamięci dla danych metapliku 1 TB. Tak TB, nie GB.

Obecnie praca uruchamia ten skrypt we wszystkich naszych witrynach na naszych serwerach, które organizują kopie zapasowe witryny, które każdego dnia zajmują się milionami plików podczas cyklu tworzenia kopii zapasowych. Na tych serwerach kopii zapasowych działa także program Java Java (VMware vSphere), 2 serwery SQL i WSUS z własnym serwerem SQL. Dzięki oprogramowaniu do tworzenia kopii zapasowych najpierw odczytuje metadane (nazwa, rozmiar, data modyfikacji, uprawnienia, atrybuty itp.) W celu ustalenia listy plików, które zostaną utworzone w kopii zapasowej, BARDZO szybko zapełnia pamięć podręczną metapliku. Nawet robiąc wszystko, co ładnie płyną, tylko z 4 GB pamięci RAM.

BeowulfNode42
źródło