Windows 10, proces „Systemowy”, który zajmuje ogromne ilości pamięci RAM

83

Od czasu uaktualnienia do systemu Windows 10 mój system nadmiernie zużywa pamięć RAM

wprowadź opis zdjęcia tutaj

Przeczytałem trochę i stwierdziłem, że prawdopodobnie pamięć przecieka przez sterownik. Dostałem więc zestaw sterowników dla systemu Windows i śledziłem użycie pamięci za pomocą poolmon:

wprowadź opis zdjęcia tutaj

Jednak tak naprawdę nie wiem, jak to zrobić. Czy element jest oznaczony jako „smNp” winowajcą tego wydania? Jak przejść stamtąd do faktycznej identyfikacji kierowcy?

Próbowałem czegoś takiego jak „C: \ Windows \ System32 \ drivers> findstr / s smnp . ”, Ale nie zwróciło żadnych wyników. Spojrzałem również na plik pooltag.txt i oto opis, który dla niego znalazłem:

wprowadź opis zdjęcia tutaj

Tak, każda pomoc byłaby mile widziana. Z góry dziękuję.

Nayncore
źródło
1
ok, dodałem informacje, które udało mi się znaleźć. Sprawdź je
magicandre1981,
1
Jest to funkcja systemu, która pozwala przechowywać więcej rzeczy w pamięci RAM za pomocą kompresji zamiast stronicowania na dysk. @ magicandre1981 ma tutaj odpowiednie informacje, które należy zaakceptować jako prawidłową odpowiedź.
Mani Gandham,
14 megabajtów, które pokazuje poolmon, jest powiązane ze znacznikiem smNp. Martwisz się o 1,3 GB w prywatnym zestawie roboczym procesu systemowego - po co skupiać się na 14 MB puli niestronicowanej (której w ogóle nie ma w zestawie roboczym żadnego procesu)?
Jamie Hanrahan,

Odpowiedzi:

13

Przejście do services.msc(przez Win+R) i wyłączenie Superfetch całkowicie rozwiązuje ten problem. Nie jestem pewien, czy Superfetch jest po prostu zepsuty, czy też jest „z założenia”.

Ponadto pozorne usunięcie pliku stronicowania będzie miało taki sam efekt, ale powyższe rozwiązanie jest bezpieczniejsze .

legowisko
źródło
1
To faktycznie działało. Zużycie pamięci przez system powraca do ~ 0,1 MB nawet po wielu godzinach użytkowania. Dzięki!
Nayncore,
26
Podczas gdy zwykle tak wysokie użycie pamięci byłoby czerwoną flagą dla wycieku pamięci, pamięć ta jest używana zgodnie z prawem jako CECHA systemu Windows 10 (patrz odpowiedź magicandre poniżej).
Bigbio2002,
7
to nie jest błąd i nie należy go
wyłączać
6
Jeśli funkcja powoduje ciągłe ostrzeżenia o niskim poziomie pamięci, nie jest to dobra funkcja. Teraz mój Surface Pro z 4 GB pamięci RAM jest całkowicie bezużyteczny do programowania i nawet na laptopie z 8 GB pamięci RAM ciągle otrzymuję te ostrzeżenia. Kciuk w górę dla rozwiązania!
Oleg I.
94

Obejrzałem ślady xperf kilku użytkowników i tutaj funkcja ntoskrnl.exe!SmKmStoreHelperWorkerjądra zaczyna alokować pamięć.

Zrzut ekranu
(Kliknij obraz, aby powiększyć)

Odkryłem to na sysinternals .

Zapytałem o to Microsoft, a odpowiedź brzmi, że jest to zgodne z projektem. Jest to związane z kompresją pamięci systemowej.

W ogłoszeniu Windows 10 Build 10525 Microsoft wyjaśnił to trochę :

W Windows 10 dodaliśmy nową koncepcję w Menedżerze pamięci, zwaną sklepem kompresji, który jest kolekcją skompresowanych stron w pamięci. Oznacza to, że gdy Menedżer pamięci odczuje presję pamięci, skompresuje nieużywane strony zamiast zapisywać je na dysku. Zmniejsza to ilość pamięci używanej na proces, umożliwiając systemowi Windows 10 utrzymanie większej liczby aplikacji w pamięci fizycznej na raz. Pomaga to również zapewnić lepszą szybkość reakcji w systemie Windows 10. Magazyn kompresji znajduje się w zestawie roboczym procesu systemowego.Ponieważ proces systemowy utrzymuje pamięć w pamięci, jego zestaw roboczy powiększa się dokładnie wtedy, gdy pamięć jest udostępniana dla innych procesów. Jest to widoczne w Menedżerze zadań i dlatego proces systemowy zużywa więcej pamięci niż poprzednie wersje.

Zamiast zapisywać dane pamięci do pliku strony, kompresuje je. Ta skompresowana pamięć jest pokazywana w procesie systemowym.

Microsoft opublikował także więcej szczegółów w wewnętrznym hubie. Winbeta stworzył artykuł, który zawiera więcej szczegółów.

Najwyraźniej przyczyną takiego stanu rzeczy było to, że Microsoft zdecydował się zawiesić aplikacje UWP, gdy nie znajdowały się na pierwszym planie, bardzo podobnie do niektórych systemów operacyjnych dla smartfonów. Użytkownicy systemu Windows 8 rozumieli (być może nie), że jeśli aplikacje nie byłyby wyświetlane na ekranie, nie działałyby, dopóki użytkownik nie wróci do nich. Podejście „wszystko albo nic” jest aktualizowane w systemie Windows 10, wprowadzając warstwę między plikiem stronicowania a normalną aktywnością stronicowania. Teraz, w obliczu problemów z presją pamięci, MM określi, które strony powinny zostać przeniesione na zmodyfikowaną listę w procesie zwanym przycinaniem.Zmodyfikowana lista to dodatkowa lista plików stron tworzących kopie zapasowe plików stronicowania. Lista kopii zapasowych jest przechwytywana na wypadek, gdyby pamięć została odzyskana z listy rezerwowej przez inny proces, a proces oryginalny szuka swojej strony. Zamiast wszystkiego lub nic, Windows 10 MM kompresuje nieużywane strony zamiast zapisywać je na dysku. Przy mniejszym zapisie wynikiem powinno być mniej operacji na dysku - dzięki kompresji - a teraz więcej danych może być przechowywanych w pamięci.

wprowadź opis zdjęcia tutaj

Według zespołu systemu Windows: „ W praktyce skompresowana pamięć zajmuje około 40% nieskompresowanego rozmiaru, a w wyniku typowego urządzenia z typowym obciążeniem system Windows 10 zapisuje strony na dysku tylko 50% tak często, jak poprzednie wersje system operacyjny. „Jeśli wszystko pójdzie zgodnie z planem, użytkownicy systemu Windows mogą doświadczyć skrócenia czasu oczekiwania na wszystkie urządzenia, a także dłuższej żywotności w systemach z dyskami twardymi typu flash .

Dekompresja jest również czymś, co system Windows 10 ma dobrze sobie radzić. Windows 10 używa kombinacji równoległości i sekwencyjnych odczytów, aby wywołać strony do pamięci po wywołaniu. Nowa dekompresja powinna przyspieszyć działanie, ponieważ system Windows 10 jednocześnie dekompresuje dane i odczytuje je równolegle przy użyciu wielu procesorów. Starsze wersje systemu Windows mogły wydawać się powolne z powodu szybkości transferu między dyskami.

Microsoft wydał także wideo na Channel9, które wyjaśnia tę funkcję.

Kompresja pamięci w systemie Windows 10 RTM
https://channel9.msdn.com/Blogs/Seth-Juarez/Memory-Compression-in-Windows-10-RTM

W tym filmie Mehmet Iyigun poświęcił trochę czasu na omówienie, dlaczego proces systemowy w systemie Windows 10 zajmuje trochę więcej pamięci i dlaczego jest to dobra rzecz. Proces zajmujący więcej pamięci brzmi jak zła rzecz - dopóki nie zrozumiałem więcej na temat zarządzania pamięcią, stronicowania i błędów twardych / miękkich stron. Okazuje się, że system operacyjny dokonuje sprytnych optymalizacji, które pozwalają procesom przyciąć część pamięci, ale niekoniecznie przesyłają ją na dysk. Pamięć jest nie tylko zachowana w pamięci RAM, ale jest również kompresowana - dzięki czemu trudne błędy stron są rzadszym zjawiskiem. Wyniki powinny zapewnić szybsze wrażenia.

W najnowszych kompilacjach TH2 Microsoft zaktualizował opis w menedżerze zadań, a teraz pokazuje również, że proces SYSTEM obsługuje compressed memory:

wprowadź opis zdjęcia tutaj

aby uniknąć nieporozumień związanych z „wysokim” użyciem.

W rocznicowej aktualizacji systemu Windows 10, która została wydana w sierpniu 2016 r., Microsoft wyodrębnił kompresję do pokazanej teraz w pseudo-procesie wywoływanym, Memory Compressionaby nie mylić użytkowników, dlaczego SYSTEM ma tak duże użycie pamięci:

wprowadź opis zdjęcia tutaj

Ale wygląda na to, że Taskmgr nie pokazuje tego procesu, tylko ProcessExplorer / ProcessHacker jest w stanie go pokazać. Taskmgr pokazuje tylko ilość skompresowanej pamięci w przeglądzie:

wprowadź opis zdjęcia tutaj

Po najechaniu wskaźnikiem myszy na wykres używanej pamięci w Taskmgr zobaczysz etykietkę pokazującą ilość skompresowanych danych.

wprowadź opis zdjęcia tutaj

W tym demo 388 MB zostało skompresowanych do 122 MB, więc 267 MB zostało zapisanych z kompresją.

magicandre1981
źródło
9
@Zaibis: Myślę, że chodzi o to, że nie „upuszczasz 1 GB”. 1 GB został zarezerwowany przez system Windows i zostanie wykorzystany do alokacji. Nie straciłeś pamięci.
Wyścigi lekkości na orbicie
12
„Niewykorzystana pamięć to zmarnowana pamięć” od dawna jest mantrą OS X. Wygląda na to, że Windows też się w nią znalazł.
deceze
1
@ magicandre1981 Co rozumiesz przezSystem Memory compression
user2284570,
2
Nie potrafię szczegółowo odpowiedzieć na to pytanie. Mam tylko informację, że jest to zgodne z projektem, ma coś wspólnego z kompresją pamięci, co zostanie wyjaśnione w blogu. Kiedy otrzymam nowe informacje, zaktualizuję swój post.
magicandre1981,
2
@JosiahKeller Okno dialogowe „małej pamięci” dotyczy małej ilości pamięci wirtualnej. Nie ma prawie nic wspólnego z wykorzystaniem lub dostępnością pamięci fizycznej (RAM). Są one rozliczane osobno przez wszystkie nowoczesne systemy operacyjne dla komputerów stacjonarnych.
David Schwartz,
0

Znalazłem przypadek odstający, który powoduje duże zużycie pamięci systemowej, i chciałem go dołączyć, na wypadek gdyby te informacje były korzystne dla kogokolwiek.

Jeśli intensywnie korzystasz z migawek woluminów firmy Microsoft (migawek programowych, a nie migawek sprzętowych), im więcej migawek utrzymasz w połączeniu z dużymi zmianami danych, system zużyje więcej pamięci RAM.

Zwykle ilość pamięci RAM wykorzystywanej do wykonywania migawek woluminów jest niewielka i nie zostanie zauważona, chyba że masz gigantyczny wolumin (tj. 64 TB) z deltami wielotabajtowymi między migawkami. Domyślnie migawki same się usuwają, jeśli liczba operacji zapisu jest zbyt wysoka, ale istnieją sposoby, aby temu zapobiec, pozwalając na osiągnięcie ogromnych delt.

Poniżej znajduje się skrajny przypadek pokazujący proces systemowy serwera wykorzystujący 13 GB pamięci RAM. Ten serwer ma tylko dwie migawki woluminów, wykonane w odstępie 15 dni, z około 10 TB danych zapisanych pomiędzy każdą migawką.

Zużycie pamięci systemowej przy 13 GB

Powyższy proces systemu poprzednio miał 24 GB użytkowania i zaobserwowano następujące trzy zachowania:

  1. Po ponownym uruchomieniu komputera i ponownym zalogowaniu się system zawiesił się na pewien czas na pustym ekranie, aż pojawi się pulpit.
  2. Podczas tego zawieszenia pobranie Menedżera zadań (CTRL-SHIFT-ESC) pokazało rosnące zużycie pamięci systemowej.
  3. Podczas tego zawieszenia dysk z migawkami woluminów wykonał wiele odczytów, które nie pojawiły się w Monitorze wydajności. Ponieważ jednak dysk wykorzystywał iSCSI, karta sieciowa wykazywała stały strumień odczytu około 200 Mb / s.

Podejrzewałem migawki woluminów, więc spróbowałem usunąć najstarszą migawkę, która natychmiast zmniejszyła zużycie pamięci systemu z 24 GB do 13 GB.

W tych okolicznościach może to być normalne zachowanie, chociaż nie potwierdziłem tego w firmie Microsoft. W międzyczasie dodam do tego serwera dodatkowe 32 GB pamięci RAM, aby obsłużyć migawkę.

(Uwaga: jest to serwer kopii zapasowych o dużej pojemności z systemem Windows 2016 z podłączonym dyskiem SSD iSCSI o pojemności 64 TB. Utrzymuje średnio trzy migawki woluminów w danym momencie, z nowym tworzonym co 15 dni. Istnieje około 10 TB dane zapisane między każdą migawką).

Brain2000
źródło
-1

Wyłącz moduł pobierania wstępnego w kluczu regedit: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParametersprawdopodobnie masz Enable Prefetcherwartość 2lub 3taką zmianę na0

Następnie musisz wyłączyć Superfetchw usługach

  1. Wyszukaj services.msc

  2. Znajdź superfetchkliknij, propertiesa następnie ustaw go disabledi zatrzymaj usługę.

Robię te kroki, a kiedy systemgram i zwykle korzystam z komputera, a proces wykorzystuje tylko 28 tys

Grzesiek Grzychu Góra
źródło
12
To okropny pomysł. Pobieranie wstępne / superszybkie są używane z jakiegoś powodu. Jeśli uważasz, że możesz zarządzać pamięcią lepiej niż system operacyjny, niestety się mylisz.
b1nary.atr0phy
Wyłączenie pobierania wstępnego (lub „wyczyszczenie folderu pobierania wstępnego”) jest naprawdę bardzo głupim pomysłem. Pobieranie wstępne nie powoduje, że system zużywa więcej pamięci RAM. Przyspiesza ładowanie plików exe i dll po ich uruchomieniu i tylko wtedy. Ponownie SuperFetch, Microsoft domyślnie wyłącza SuperFetch w systemach z dyskiem SSD dla dysku Windows; uważają, że korzyść nie jest tego warta. Osobiście utrzymuję ją włączoną, ponieważ mam inne dyski inne niż SSD, na których chcę, aby SF nadal działała.
Jamie Hanrahan