2015-08-07 04:17:19 +0000 2015-08-07 04:17:19 +0000
82
82

Windows 10, proces "System" pobierający ogromne ilości pamięci RAM

Odkąd zaktualizowałem system do Windows 10, mój system nadmiernie zużywa pamięć RAM

Czytałem trochę i stwierdziłem, że to prawdopodobnie sterownik przeciekający pamięć. Zdobyłem więc sobie Windows Driver Kit i śledziłem zużycie pamięci za pomocą poolmon:

Jednak nie bardzo wiem jak dalej postępować. Czy element oznaczony jako “smNp” jest winowajcą w tym problemie? Jak mam się zabrać za identyfikację sterownika?

Próbowałem kilku rzeczy, takich jak “C:\Windows\System32\drivers>findstr /s smnp .”, ale nie dało to żadnych rezultatów. Spojrzałem również na plik pooltag.txt i to jest opis, który znalazłem:

Więc tak, każda pomoc będzie doceniona. Z góry dzięki.

Odpowiedzi (4)

93
93
93
2015-08-07 04:20:09 +0000

Spojrzałem na ślady xperf kilku użytkowników i tutaj funkcja ntoskrnl.exe!SmKmStoreHelperWorker Kernela zaczyna alokować pamięć.

(Kliknij obrazek aby powiększyć)

Odkryłem to na sysinternals .

Zapytałem o to Microsoft i odpowiedź jest taka, że jest to zamierzone. Jest to związane z kompresją pamięci systemowej.

W zapowiedzi Windows 10 Build 10525, Microsoft nieco to wyjaśnił :

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 poczuje presję pamięci, skompresuje nieużywane strony zamiast zapisywać je na dysku. Zmniejsza to ilość pamięci używanej przez proces, pozwalając systemowi Windows 10 na utrzymanie większej liczby aplikacji w pamięci fizycznej w tym samym czasie. Pomaga to również zapewnić lepszą responsywność w całym systemie Windows 10. Magazyn kompresji znajduje się w zbiorze roboczym procesu System. Ponieważ proces systemowy przechowuje magazyn w pamięci, jego zestaw roboczy powiększa się dokładnie wtedy, gdy pamięć jest udostępniana innym procesom. Jest to widoczne w Menedżerze zadań i jest powodem, dla którego proces System wydaje się zużywać więcej pamięci niż poprzednie wydania.

Więc zamiast zapisywać dane pamięci do pliku strony, kompresuje je. I ta skompresowana pamięć jest wyświetlana w procesie System.

Microsoft zamieścił również więcej szczegółów w wewnętrznym hubie. Winbeta stworzyła artykuł ](http://www.winbeta.org/news/microsoft-educates-insiders-windows-10-handles-memory) , który zawiera więcej szczegółów.

Najwyraźniej powodem tego stało się zrobienie z Microsoftem decydując się na zawieszenie aplikacji UWP, gdy nie były one na pierwszym planie, bardzo podobne do niektórych smartfonów zarządzania OS. Użytkownicy Windows 8 rozumieli (być może nie), że jeśli aplikacje nie były na ekranie, nie będą uruchamiane, dopóki użytkownik nie przełączy się na nie z powrotem. Podejście “wszystko albo nic” jest aktualizowane w Windows 10 wprowadzając warstwę pomiędzy plikiem stron a normalną aktywnością stronicowania. Teraz, w obliczu problemów związanych z presją pamięci, MM określi, które strony powinny zostać przeniesione na zmodyfikowaną listę w procesie zwanym przycinaniem. Zmodyfikowana lista jest drugorzędną listą plików stron, która stanowi kopię zapasową dla listy rezerwowych plików stron. Lista rezerwowa jest przechwytywana na wypadek, gdyby pamięć została odzyskana z listy rezerwowej przez inny proces, a oryginalny proces przyszedł szukać swojej strony. Zamiast wszystko albo nic, Windows 10 MM będzie kompresował nieużywane strony, zamiast zapisywać je na dysku. Dzięki mniejszemu zapisowi, rezultatem powinno być mniej operacji dyskowych - dzięki kompresji - a teraz więcej danych może być przechowywanych w pamięci.

Według zespołu Windows, “ W praktyce, skompresowana pamięć zajmuje około 40% nieskompresowanego rozmiaru, a w wyniku typowego urządzenia wykonującego typowe obciążenie, Windows 10 zapisuje strony na dysku tylko 50% tak często, jak poprzednie wersje systemu operacyjnego. ” Jeśli wszystko pójdzie zgodnie z planem, użytkownicy Windows mogą doświadczyć skrócenia czasu oczekiwania na wszystkie urządzenia, jak również wydłużenia żywotności systemów, które mają dyski twarde oparte na pamięci flash.

Dekompresja jest również czymś, co Windows 10 ma robić dobrze. Windows 10 wykorzystuje kombinację równoległości i sekwencyjnego odczytu do tworzenia stron w pamięci po wywołaniu. Nowa dekompresja powinna zaowocować szybszym doświadczeniem, ponieważ Windows 10 jednocześnie dekompresuje dane i odczytuje je równolegle, wykorzystując wiele procesorów. Starsze wersje systemu Windows mogły odczuwać spowolnienie z powodu szybkości transferu między dyskami.

Microsoft opublikował również film na kanale9, który wyjaśnia tę funkcję.

Kompresja pamięci w 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 System w 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 - tak jest dopóki nie zrozumiałem więcej o zarządzaniu pamięcią, stronicowaniu i twardych / miękkich błędach strony. Okazuje się, że system operacyjny wykonuje pewne sprytne optymalizacje, które pozwalają procesom przyciąć część pamięci, ale niekoniecznie stronicować ją na dysku. Pamięć jest nie tylko zachowana w RAM, ale także skompresowana - dzięki czemu błędy stron są rzadsze. Rezultatem powinno być szybsze działanie.

W najnowszych buildach TH2, Microsoft zaktualizował opis w menadżerze zadań i teraz pokazuje również, że proces SYSTEM jest gospodarzem procesu compressed memory:

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

W Windowsie 10 Anniversary Update, który został wydany w sierpniu 2016 roku, Microsoft wyodrębnił Kompresję w teraz pokazaną w pseudo procesie o nazwie Memory Compression, aby nie mylić już użytkowników, dlaczego SYSTEM ma tak duże użycie pamięci:

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

Jeśli najedziesz na wykres zużytej pamięci w Taskmgr zobaczysz tooltip, który pokazuje ilość danych, które są skompresowane.

W tym demo 388MB zostało skompresowane do 122MB, więc 267MB zostało zaoszczędzone dzięki kompresji.

13
13
13
2015-08-09 23:24:30 +0000

Wejście do services.msc (poprzez Win+R) i wyłączenie Superfetch całkowicie rozwiązuje ten problem. Nie jestem pewien, czy Superfetch jest po prostu zepsuty od teraz, czy jest to “by design”.

Dodatkowo, najwyraźniej pozbycie się pliku stronicowania da ten sam efekt, ale powyższe rozwiązanie jest bezpieczniejsze.

0
0
0
2019-08-31 16:21:39 +0000

Znalazłem nietypowy przypadek, który powoduje duże zużycie pamięci systemowej i chciałem go zamieścić na wypadek, gdyby ta informacja komuś się przydała.

Jeśli intensywnie korzystasz z Migawek Wolumenu Microsoftu (migawki programowe, nie sprzętowe), im więcej migawek utrzymujesz w połączeniu z dużymi zmianami danych, tym System będzie zużywał więcej pamięci RAM.

Normalnie ilość pamięci RAM używanej przez migawki wolumenu jest niewielka i nie będzie zauważalna, chyba że masz gigantyczny wolumen (np. 64 TB) z wieloterabajtowymi deltami pomiędzy migawkami. Domyślnie, snapshoty po prostu usuwają się, jeśli zapis IO jest zbyt wysoki, ale istnieją sposoby, aby temu zapobiec, co pozwala na osiągnięcie ogromnych delt.

Poniżej znajduje się skrajny przypadek pokazujący proces System serwera wykorzystujący 13 GB pamięci RAM. Serwer ten posiada tylko dwa Volume Snapshoty, wykonane w odstępie 15 dni, z około 10 TB danych zapisanych pomiędzy każdym z nich.

Powyższy proces System był wcześniej wykorzystywany na poziomie 24GB i zaobserwowano następujące trzy zachowania:

  1. Po restarcie i ponownym zalogowaniu się, system zawieszał się na pewien czas na pustym ekranie, aż do pojawienia się pulpitu.
  2. Podczas tego zawieszenia, wywołanie Menedżera zadań (CTRL-SHIFT-ESC) pokazywało rosnące użycie pamięci systemowej.
  3. Podczas tego zawieszenia, dysk ze zrzutami woluminów wykonywał wiele odczytów, które nie były widoczne w Monitorze wydajności. Chociaż, ponieważ dysk wykorzystywał iSCSI, karta sieciowa pokazywała stały strumień odczytu około 200 Mbps.

Podejrzewałem Volume Snapshoty, więc spróbowałem usunąć najstarszy snapshot, co natychmiast zmniejszyło użycie pamięci Systemu z 24 GB do 13 GB.

W tych okolicznościach może to być normalne zachowanie, choć nie potwierdziłem tego z Microsoftem. W międzyczasie dodam dodatkowe 32 GB pamięci RAM do tego serwera, aby obsłużyć narzut Snapshotów.

(Uwaga: jest to serwer do tworzenia kopii zapasowych o dużej objętości działający pod kontrolą systemu Windows 2016 z podłączonym dyskiem SSD iSCSI o pojemności 64 TB. Utrzymuje on średnio trzy migawki woluminu w danym momencie, z nową migawką tworzoną co 15 dni. Pomiędzy każdą migawką zapisywane jest około 10 TB danych).

-1
-1
-1
2015-08-20 11:08:59 +0000

Wyłącz prefetcher w regedit klucz: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters prawdopodobnie masz Enable Prefetcher na wartość 2 lub 3 więc zmień ją na 0

Następnie musisz wyłączyć Superfetch w usługach

  1. Wyszukaj services.msc

  2. Znajdź superfetch kliknij properties następnie ustaw go na disabled i zatrzymaj usługę również.

Wykonuję te kroki i kiedy gram w gry i normalnie używam komputera, a proces system używa tylko 28k