Windows zużywa zbyt dużo pamięci RAM, jak zdiagnozować wieprz zasobów

73

Mam 16 GB pamięci RAM systemu. Podczas uruchamiania bez otwartych aplikacji oprócz menedżera zadań system Windows zużywa około 3 GB pamięci RAM. Zajrzałem do zakładki procesów, ale wydaje się, że nic nie jest niezwykłe. Jak mogę dowiedzieć się, dlaczego mój system Windows wykorzystuje tak dużo pamięci RAM.

wprowadź opis zdjęcia tutaj

wszystkie procesy od wszystkich użytkowników

wprowadź opis zdjęcia tutaj


Czytając z puli, wydaje się, że mój bezprzewodowy sterownik Broadcom zużywa około 0,4 GB pamięci RAM. Nawet gdybym go usunął, nadal używałby 2,6 GB przy uruchamianiu, co wciąż jest zbyt duże.

wprowadź opis zdjęcia tutaj


Po ponownej instalacji sterownika bezprzewodowego związanego z wyciekiem pamięci. Mam nowy zrzut ekranu i chciałbym potwierdzić, że rzeczywiście był to wyciek pamięci.

wprowadź opis zdjęcia tutaj

Vader
źródło
3
Przede wszystkim masz tylko 12 GB. Albo jeden z czterech drążków 4 GB jest zły lub źle osadzony, albo Twoja płyta główna nie obsługuje 16 GB. Po drugie, czy próbowałeś uruchomić jakieś programy zabezpieczające w celu wykrycia złośliwego oprogramowania? Security Essentials jest wbudowany, więc zaktualizuj jego definicje i uruchom skanowanie. Wypróbuj także niektóre programy anty-rootkitowe, ponieważ rootkity specjalnie się ukrywają (chociaż zwykle starają się zachować niski profil, aby pozostać niezauważonym, a zużywanie kilku gigabajtów pamięci RAM raczej się nie wtapia).
Synetech,
Warto przyjrzeć się wydajności -> monitorowi zasobów
Journeyman Geek
Spróbuj uruchomić polecenie tasklist przekierowując dane wyjściowe do pliku C: \ blah> tasklist> aa, a następnie otwórz plik aa, zobaczysz sumy dla każdego procesu, np. 15 100 K, usuń K po nich i zsumuj całość za pomocą Excela. Sprawdź, czy suma odpowiada wartości wykorzystanej, którą menedżer zadań podaje w pobliżu wykresu dla wykorzystanej. Dla mnie suma z tasklist wynosi 4 GB, a menedżer zadań mówi 4,5 GB. Nie potrafię wyjaśnić mojej rozbieżności, ale nie jest ona ogromna. byłoby interesujące, gdybyś miał dużą rozbieżność.
barlop
Nie mam programu Excel
Vader,
1
Tagi NDxx to ndis.sys. Domyślam się, że BRCM to Broadcom. Oznaczałoby to, że problem stanowi karta sieciowa.
David Marshall

Odpowiedzi:

82

Masz wyciek pamięci spowodowany przez sterownik. Spójrz na wysoką wartość niestronicowanej pamięci jądra. W twoim przypadku jest to ponad 3,7 GB. Możesz użyć poolmon, aby zobaczyć, który sterownik powoduje duże użycie.

Zainstaluj Windows WDK , uruchom poolmon, posortuj go Pwedług typu puli po, tak aby nie stronicowany był na wierzchu i Bbajtów po, aby zobaczyć znacznik, który zużywa najwięcej pamięci. Uruchom poolmon, przechodząc do folderu, w którym zainstalowano WDK, przejdź do Narzędzia (lub C: \ Program Files (x86) \ Windows Kits \ 10 \ Tools \ x64) i kliknij poolmon.exe.

Teraz spójrz, który znacznik zużywa najwięcej pamięci, jak pokazano tutaj:

wprowadź opis zdjęcia tutaj

Teraz otwórz wiersz polecenia i uruchom polecenie findstr. Aby to zrobić, otwórz wiersz polecenia cmd i wpisz „cd C: \ Windows \ System32 \ drivers”, bez cudzysłowów. Następnie wpisz „findstr / s __ . ”, Gdzie __ jest znacznikiem (nazwa najbardziej lewa w poolmon). Zrób to, aby zobaczyć, który sterownik używa tego znacznika:

wprowadź opis zdjęcia tutaj

Teraz przejdź do folderu sterowników (C: \ Windows \ System32 \ drivers) i kliknij prawym przyciskiem myszy dany sterownik (intmsd.sys w powyższym przykładzie obrazu). Kliknij Właściwości, przejdź do zakładki szczegółów, aby znaleźć nazwę produktu. Poszukaj aktualizacji dla tego produktu.

Jeśli tag pooltag pokazuje tylko sterowniki Windows lub jest wymieniony w pooltag.txt ( "C:\Program Files (x86)\Windows Kits\8.1\Debuggers\x64\triage\pooltag.txt")

używasz xperf do śledzenia, co powoduje użycie . Zainstaluj WPT z zestawu Windows SDK , otwórz cmd.exe jako administrator i uruchom to:

xperf -on PROC_THREAD + ŁADOWARKA + BASEN -stackwalk PoolAlloc + PoolFree + PoolAllocSession + PoolFreeSession -BufferSize 2048 -MaxFile 1024 -FileMode Circular && timeout -1 && xperf -d C: \ pool.etl

uchwycić 30 -60 wzrostu. Otwórz ETL za pomocą WPA.exe, dodaj wykresy puli do okienka analizy.

Umieść kolumnę pooltag na pierwszym miejscu i dodaj kolumnę stosu. Teraz załaduj symbole do WPA.exe i rozwiń stos znacznika, który widziałeś w poolmon.

wprowadź opis zdjęcia tutaj

Teraz znajdź inne sterowniki innych firm, które możesz zobaczyć na stosie. Tutaj Threznacznik (Wątek) jest używany przez AVKCl.exe z G-Data. Poszukaj aktualizacji sterownika / programu, aby to naprawić.

magicandre1981
źródło
1
przepraszam. @Jebediah Kerman uruchomiłeś polecenie findstr? Nazwa może być związana ze sterownikiem karty sieciowej. Jeśli nadal masz problemy, uruchom RAMMap, zapisz dane jako RMP, skompresuj plik RMP i prześlij zip.
magicandre1981,
to może brzmieć głupio. Ale jak mam zacząć poolmon. Kiedyś mogłem wyszukać „poolmon.exe” i uruchomić
Vader
@JebediahKerman Myślę, że już to zrobiłeś i znalazłeś tagi. Czy zdjęcie z Twojego postu nie jest Twoim pulmonem?
magicandre1981,
Zdjęcie jest moje. z jakiegoś powodu indeks wyszukiwania był niekompletny.
Vader
@JebediahKerman sprawdziłeś, co to jest NDFT? Można również użyć xperf prześledzić wykorzystanie basenu: channel9.msdn.com/Shows/Defrag-Tools/...
magicandre1981
15

Po pierwsze, zanim przejdę do bardziej szczegółowej odpowiedzi. W pierwszym zrzucie ekranu pula niestronicowana (rodzaj użycia pamięci jądra) ma pojemność 1,3 GB. Wydaje mi się to niezwykle wysokie, szczególnie przez 30 minut po uruchomieniu. Wydaje mi się, że widziałem, jak NP Pool osiąga tak wysoki poziom po długim okresie użytkowania lub z programem, który przeciekał jak sito. Dla kontrastu, moja pula NP ma zwykle od 100 do 200 megabajtów, a pula stronicowana może mieć nawet 400 lub 500 (i to po tym, jak mój system działał bez ponownego uruchamiania przez tygodnie).


Możesz włączyć kilka dodatkowych kolumn w Menedżerze zadań, klikając prawym przyciskiem myszy nagłówki kolumn i wybierając wybierz kolumny. Należy dodać Working Set (private), Working Set (shared), Commit, i NP Pool. Przeanalizuję wszystkie twoje procesy od wszystkich użytkowników i sprawdzę, czy któryś z nich ma pulę NP większą niż około 256 KB. Jeśli zauważysz jakieś, szczególnie te, które są znacznie wyższe, może to być przyczyna problemu lub przynajmniej jego część.

Całkowity zestaw roboczy, ilość pamięci fizycznej wykorzystywanej przez proces, jest kombinacją prywatnych i współużytkowanych zestawów roboczych (WS). Prywatne jest zwykle większe dla większości procesów, jednak niektóre mogą korzystać z większej ilości współdzielonych WS. Te dwa powinny zwykle sumować się do całkowitej WS. Zatwierdzenie to ilość zestawu roboczego, która została przypisana do magazynu kopii zapasowych (w większości przypadków plik stronicowania systemu Windows). Aplikacje w tle często mają większy Commit niż WS, co wskazuje, że znaczna część ich puli stronicowanej została zamieniona z pamięci i do pliku stronicowania (co jest dość normalne w przypadku aplikacji komputerowych, które zostały zminimalizowane i nie były używane przez jakiś czas).

Pula niestronicowana jest pamięcią, której nie można i nigdy nie można zastąpić pamięcią fizyczną ... co jest efektywnym trwałym minimalnym zużyciem pamięci fizycznej. Pamięć puli NP często zawiera kod programu i krytyczne sekcje, które muszą znajdować się w pamięci fizycznej, aby zachowywać się poprawnie lub bezpiecznie, specjalne stosy itp. Z 60 procesów, jeśli wszystkie mają 256 KB pamięci puli NP, wówczas absolutne minimalne użycie pamięci fizycznej wyniesie około 15.360 KB. W większości przypadków jedna lub dwie aplikacje mogą mieć pulę NP 256 KB, podczas gdy większość ma mniej, często znacznie mniej (lub nie ma ich wcale). Jest bardzo mało prawdopodobne, że system przerzuci cały zestaw wszystkich działających procesów, więc nigdy nie oczekuj, że użycie pamięci będzie tak niskie.


Wreszcie, celem większej ilości pamięci jest uniknięcie konieczności stronicowania danych do iz rozszerzonej pamięci (wymiany, pliku strony) na dysku fizycznym. Stronicowanie to proces polegający na przenoszeniu bloków przydzielonej pamięci fizycznej, wypychaniu niektórych na dysk i przenoszeniu innych do pamięci fizycznej z dysku. Przywoływanie jest, mówiąc najprościej, wysoce niepożądane. Nie jest to samo w sobie „złe”, ale może występować utrudnienie w wydajności, gdy występuje zbyt często. Ostatecznym punktem zwiększenia całkowitej fizycznej pamięci RAM w systemie jest umożliwienie większej liczbie procesów zachowania większej liczby zmian w pamięci fizycznej (większy zestaw roboczy). Zużycie pamięci nie stanowi problemu, a gdy więcej wykonujących procesów zużywa więcej pamięci, całkowita wydajność systemu i wydajność aktywnego procesu będą zwykle wyższe,

System Windows zarządza pamięcią i automatycznie zapisuje dane z pamięci do i z pliku strony (wymiany). Jeśli uruchomisz proces, który wymaga 9 GB pamięci, a Twój system zużywa już 4 GB (z 12 GB), system automatycznie zorientuje się, które procesy nie potrzebują natychmiastowego dostępu do całego zestawu roboczego, i wyświetli niektóre lub wszystkie strony puli stronicowanej do wymiany, aby zwolnić ten dodatkowy 1 GB. Jeśli twój duży proces w końcu potrzebuje więcej pamięci, system Windows jeszcze bardziej zmniejszy zestaw roboczy innych procesów, dopóki nie będzie miał wystarczającej ilości wolnego miejsca do przydzielenia nowo żądanego bloku. Twój duży proces może ostatecznie zużyć całą dostępną pamięć oprócz NP Pool i być może trochę dodatkowego narzutu w celu okresowego wykonywania procesów, które nie pozwalają Windowsowi zwolnić więcej zestawu roboczego (i. mi. mają oczekujące błędy strony, które w przeciwnym razie Windows wymieniłby się z pamięci fizycznej, ale ponieważ są proszone, nie można ich przenieść).

Jeśli proces potrzebuje więcej pamięci, niż jest to dozwolone (procesy 32-bitowe zwykle mają dostęp do 2 Gb, a niektóre nieco mniej niż 4 Gb za pomocą ulepszonych technik, podczas gdy procesy 64-bitowe zwykle mają dostęp do około 48 Gb pamięci, każdy), wtedy system Windows czasami spróbuje do wirtualizacji pamięci za pomocą przestrzeni wymiany. Jeśli 32-bitowa aplikacja chce wykorzystać maksymalne dozwolone 2 GB miejsca, ale dostępne jest tylko 1,2 GB, system Windows zarezerwuje pełne 2 GB w pliku strony i przenosi własne dane do i z pliku strony w razie potrzeby w celu obsługuje wykorzystanie pamięci aplikacji. Całkowite użycie „pamięci” w tym przypadku może wydawać się większe niż dostępna pamięć fizyczna, gdy przechodzisz przez Total Commit. Total Commit zwykle osiąga maksymalny rozmiar przy wielkim całkowitym rozmiarze pliku strony, który zarządzany przez system zwykle wynosi 2-3 razy więcej pamięci fizycznej. W Twoim przypadku,


Ostatni punkt. W odpowiedzi powiedziałeś, że masz 16 GB pamięci RAM, a jako Menedżer zadań widzi tylko 12 GB pamięci RAM. Jedna z dwóch rzeczy tutaj. Albo twój system naprawdę ma tylko 12 GB pamięci RAM, albo jeden z twoich drążków nie rejestruje się poprawnie. Jeśli pamięć RAM (zakładam 4 x 4 Gb), może być źle, może nie być prawidłowo osadzona na płycie głównej lub na płycie głównej może wystąpić problem z wykrywaniem pamięci.

Aby sprawdzić, czy to ten ostatni, należy najpierw zaktualizować system BIOS płyty głównej do najnowszej wersji. Miałem podobny problem ... moje sześć trzyczęściowych pamięci RAM DDR3 (6x 2 Gb) wszystkie były dobre w oparciu o indywidualne testowanie każdego z nich ... ale moja płyta losowa postanowiła nie liczyć jednego lub dwóch z nich tak często, często pozostawiając mi tylko 8 GB pamięci RAM. Aktualizacja systemu BIOS rozwiązała problem i mam teraz niezawodny dostęp do wszystkich 12 GB pamięci.

jrista
źródło
ciekawe .. i właśnie zauważyłem, że jego pamięć niestronicowana jest bardzo duża .. moja to 539 MB stronicowana, 139 MB niestronicowana.U wyraźnie wiem o tym więcej niż ja .. Ale mylisz się przy całkowitym zatwierdzeniu.U napisz „Total Commit zwykle osiąga maksymalny całkowity rozmiar pliku strony” Moja pamięć RAM wynosi 12 GB. Ustawiam plik stronicowania na 4000 MB (3,8 GB?) min i 1,5-2x pamięci jako maks. Moje maksymalne zatwierdzenie wynosi 15 GB (commit = 7 / 15 obecnie), mój plik stronicowania to około 4 GB lub prawdopodobnie nieco mniej niż 3,8 GB. Max Commit bardziej przypomina rozmiar pliku strony + rozmiar pamięci RAM. Gdy mój plik strony miał 12 GB, moje maksymalne zatwierdzenie wynosiło około 24 GB. Zatwierdzenie pliku strony prawie 3,8 GB lub maks. 4 GB wynosi 15 GB
Barlop
@barlop: Cóż, trochę nie rozumiesz, czym jest zatwierdzanie. Technicznie rzecz biorąc, opłata za zatwierdzenie jest całkowitą „wirtualnie adresowalną przestrzenią pamięci”, w tym przestrzenią obsługiwaną przez menedżerów pamięci rozszerzonej i dużą świadomość adresów. Maksymalne zatwierdzenie nie byłoby plikiem stronicowania + RAM, a raczej byłoby opisywane jako całkowita wirtualna przestrzeń adresowa zarządzana przez system. Plik stronicowania powinien zasadniczo obejmować co najmniej całkowity rozmiar pamięci fizycznej i dodatkowo rozszerzyć go poza całkowity rozmiar pamięci fizycznej. W twoim przypadku spodziewałbym się, że zobowiązanie będzie wynosić co najmniej 18 Gb (1,5x) lub 24 Gb (2x), jednak to ...
jrista,
... byłoby tak w przypadku pliku strony zarządzanego przez system. Wygląda na to, że ręcznie zmodyfikowałeś ustawienia pliku strony, w takim przypadku musiałbym dowiedzieć się więcej o twojej konkretnej konfiguracji, aby powiedzieć ci, dlaczego twoje bieżące zatwierdzenie wynosi 15 Gb (ponieważ plik strony 3,8 / 4 Gb wskazuje na zatwierdzenie 16 Gb, a nie 15 Gb .) Całkowicie możliwe jest ręczne skonfigurowanie pliku strony lub zbyt małego pliku strony, co może prowadzić do dziwnych problemów z wydajnością i alokacji pamięci. Najlepszym zaleceniem, chyba że masz wysoce specyficzną konfigurację serwera (tj. Bazy danych), jest zezwolenie Windowsowi na zarządzanie plikiem strony.
jrista,
Ostatnia uwaga. Aby uzyskać maksymalną wydajność, najlepiej pozwolić systemowi Windows przydzielić maksymalny rozmiar pliku strony z wyprzedzeniem. Zwykle odbywa się to w konfiguracjach serwera, takich jak baza danych SQL Server, w której można wstępnie przydzielić 64 Gb lub więcej (zwykle 2x fizyczny rozmiar pamięci RAM, więc może nawet 128 Gb lub 256 Gb) do pliku strony, który jest równomiernie rozłożony na wiele dysków fizycznych w celu uzyskania maksymalnej wydajności . Rozproszone pliki stron, zwłaszcza po wstępnym przydzieleniu do maksymalnego rozmiaru, umożliwiają przeplatane odczyty / zapisy na wszystkich uczestniczących dyskach, co umożliwia lepszą wydajność stronicowania poprzez równoległe operacje we / wy.
jrista
Jako przykład dużego obciążenia pamięci, mój system ma obecnie: użycie pamięci fizycznej 7,5 / 12 Gb; Zatwierdzenie 14,7 / 23,3 Gb; Pula stronicowana 491 MB; Pula np. 145 MB. Dotyczy to 146 procesów, maksymalna pula stronicowana 2276k max pula np 263k. Największy rozmiar zatwierdzeń 696 396k, a dla tego samego procesu WS to 744 256k (proces zakładki Opera). (Moja wysoka liczba procesów wynika z przeglądarki internetowej ... obecnie izolują zakładki przez proces, a ja jestem hypertabberem ... dziesiątki otwarte naraz, więc dziesiątki dodatkowych procesów.)
jrista,
12

Jak mogę dowiedzieć się, dlaczego mój system Windows wykorzystuje tak dużo pamięci RAM.

Zużywa tak dużo pamięci RAM, ponieważ jest do tego przeznaczony . Korzystanie z pamięci RAM nie wiąże się z żadnymi kosztami. W rzeczywistości używana pamięć RAM jest lepsza niż wolna pamięć RAM, ponieważ system operacyjny nie musi nic robić, aby z niej korzystać. Korzystanie z wolnej pamięci RAM wymaga jej użycia, co wymaga wysiłku.

Jeśli myślisz „Chcę teraz mieć wolną pamięć RAM, abym mógł z niej później korzystać”, zapomnij. Pamięć RAM nie musi być teraz wolna, aby użyć jej później. Możesz go użyć teraz, a później. Nie ma tutaj kompromisu - absolutnie nie ma negatywnego wpływu na użycie pamięci RAM.

Pamięć RAM jest używana i bezpośrednio przełączana z jednego użycia na drugi bez konieczności podejmowania wysiłku, aby ją uwolnić, tylko po to, aby ponownie ją użyć. Nowoczesne systemy operacyjne pozostawiają wolną pamięć RAM tylko wtedy, gdy nie mają innego wyboru.

David Schwartz
źródło
12
Jeśli mój system Windows7 używa 3 GB pamięci RAM podczas uruchamiania, bez otwartych aplikacji, coś musi być nie tak
Vader
5
@JebediahKerman Dlaczego tak mówisz? Włożyłem trochę wysiłku w wyjaśnienie, dlaczego tak nie jest i dlaczego system Windows jest do tego przeznaczony. Nie zrozumiałeś mojego wyjaśnienia? Lub, jeśli się z tym nie zgadzasz, czy możesz wyjaśnić, gdzie uważasz, że się mylę?
David Schwartz,
11
@DavidSchwartz całkowicie błędna odpowiedź. Ma wyciek pamięci przez kierowcę
magicandre1981,
9
@DavidSchwartz: Opisane zachowanie (przydziały pamięci RAM, które można ponownie wykorzystać) musi koniecznie zostać wykonane z pamięci stronicowania. Niepokojąca liczba to 1,3 GB pamięci niestronicowanej. Nie możesz tego po prostu uwolnić dla innych zasobów, dokąd poszłyby te 1,3 GB? Bycie „niestronicowanym” oznacza, że ​​właściciel powiedział „te bajty są tak ważne, że nie możesz nawet umieścić ich na dysku, nie mówiąc już o ich odrzuceniu”.
MSalters
25
Dlaczego ta „odpowiedź” jest tak wysoka? To całkowicie mija się z celem. Niezależnie od konkretnych użytych słów (które były całkowicie jasne na początku), pytanie nie brzmi “Why is Windows using RAM?”, pytanie brzmi: “Why do the RAM usage numbers not add up; why is one part reporting a higher usage than another part?”ten post powinien być co najwyżej komentarzem, ponieważ nie odnosi się do rzeczywistego pytania ani nawet nie próbuje na nie odpowiedzieć; pojawia się tylko z niewielką radą i złą radą, ponieważ jeśli OP zignoruje to jak sugerowano, wyciek pamięci nie zostanie wykryty.
Synetech,
2

Przyczyną niewymienioną powyżej jest Hyper-V.

Udało mi się to zidentyfikować za pomocą doskonałego narzędzia RamMap :

wprowadź opis zdjęcia tutaj

Zrzut ekranu pochodzi z później. Zanim pamięć „Driver Locked” przekroczyła 6 GB, ponad 80% pamięci RAM w tym konkretnym komputerze. Musiałem przejść do Menedżera funkcji Hyper-V i wyłączyć „Pamięć dynamiczną”. Co ciekawe, nawet po ponownym włączeniu pamięć „Driver Locked” pozostała niska - mogę jedynie założyć, że wcześniejsze instancje ją zwiększyły i że Hyper-V nie zmniejsza automatycznie przydzielonej pamięci:

wprowadź opis zdjęcia tutaj

Dagelf
źródło