Zauważyłem to na wielu różnych komputerach z systemem Windows, przy różnych okazjach: użycie pamięci RAM zgłaszane przez Menedżera zadań lub Monitor zasobów często wydaje się sumować do kwoty znacznie niższej niż rzeczywista używana.
Na przykład wiele razy na moim laptopie lub komputerze stacjonarnym widziałem coś w rodzaju 7 GB w użyciu, a mimo to suma roboczego zestawu pamięci RAM jest bardziej jak 3 GB. Po prostu nie mogę zrozumieć, gdzie jest używany!
Oto skrajny przykład, który zauważyłem dzisiaj w Monitorze zasobów na serwerze:
Kliknij, aby zobaczyć pełny rozmiar
Jeśli klikniesz obraz prawym przyciskiem myszy, otworzysz nową kartę i wyświetlisz liczby, zauważysz, że Zestaw roboczy (który nie zawiera niefizycznej pamięci wirtualnej) stanowi około 1,7 GB. Otrzymuję podobne liczby, sumując użycie pamięci RAM w Menedżerze zadań, gdy włączone jest „Pokaż procesy od wszystkich użytkowników”.
Oto zrzut ekranu karty Wydajność menedżera zadań:
Kliknij, aby zobaczyć pełny rozmiar
Oznacza to, że użyto 7,6 GB pamięci fizycznej.
Cały czas to widzę, na komputerach osobistych, laptopach, a teraz na serwerach: całkowite użycie pamięci RAM zgłoszone przez narzędzia systemowe stanowi tylko około 1/4 zużycia pamięci RAM, które obserwuję. Co się do cholery dzieje???
Czy jest jakieś satysfakcjonujące wyjaśnienie, gdzie jest cała moja pamięć RAM? Co to pochłania i dlaczego nie pozostawia śladu?
EDYCJA: Oto obraz wykorzystania graficznej pamięci RAM, o co poprosił użytkownik:
Kliknij, aby zobaczyć pełny rozmiar
EDYCJA 2: W odpowiedzi na odpowiedź Jamesa, oto obraz niestronicowanych procesów poolmon.exe
, posortowany według wielkości:
Te wyniki mnie mylą. poolmon
poprawnie stwierdza, że mam 6 GB puli niestronicowanej, ale wszystkie procesy puli niestronicowanej mają rozmiar mniejszy niż 8 MB.
Co to może znaczyć? Czy poolmon
nie można wykryć niektórych procesów korzystających z puli niestronicowanej?
źródło
Odpowiedzi:
Przepraszam, wiem, że to brzmi jak nonszalancka odpowiedź ... ale odpowiedź na pytanie w twoim tytule brzmi „ponieważ nie powinny”.
Lub mówiąc grzeczniej: dużo pamięci RAM nie wykorzystuje się w prywatnych zestawach roboczych procesów. Niektóre z nich znajdują się we współużytkowanych zestawach roboczych procesów - ale nie można uzyskać wiarygodnego wyobrażenia o faktycznym wykorzystaniu tam z powodu udostępniania; zsumowanie liczb procesów da zdecydowanie zbyt duży wynik.
Inne rzeczy, które zajmują pamięć RAM, takie jak pula niestronicowana, część rezydentna puli stronicowanej i części rezydentne innych zastosowań przestrzeni jądra, w ogóle nie pojawiają się na ekranie „procesów” Menedżera zadań.
Jeśli chodzi o konkretny problem:
Na ekranie Menedżera zadań zobacz sekcję „Pamięć jądra”? Masz 6 GB „niestronicowanej pamięci” (to pula niestronicowana). To część sekcji „W użyciu” na drugim wykresie. Pula niestronicowana nie jest obciążana żadnym procesem, dlatego sumowanie liczb dla poszczególnych procesów w menedżerze zadań nie zbliża się do całkowitej używanej sumy. Niektóre sterowniki najprawdopodobniej go używają. Jest to całkowicie nadmierna kwota; powinno być znacznie poniżej 1 GB. jakikolwiek sterownik odpowiedzialny za nadmierną część korzystania z puli niestronicowanej jest bez wątpienia błędny.
RAMmap może to potwierdzić (na karcie „Liczniki użycia”, spójrz na sumę „Pula niestronicowana”), ale nie może pomóc w ustaleniu, który sterownik to powoduje.
Oto, jak go znaleźć: Uzyskaj kopię narzędzia Microsoft „poolmon”. Jest to narzędzie w trybie znakowym (chłopiec, czy kiedykolwiek tak jest) rozpowszechniane z zestawem sterowników systemu Windows. W przypadku systemu Windows 7 WDK jest do pobrania za darmo . Musisz pobrać całość (ISO) i zainstalować ją z tego, ale możesz wybrać instalację tylko narzędzi, jeśli to wszystko, czego chcesz.
Znajdź poolmon w katalogach WDK - pamiętaj, aby wybrać właściwy, 32- lub 64-bitowy - i uruchom go z wiersza polecenia administratora. Otrzymasz taki ekran:
Teraz naciśnij klawisz „p” (nie, nie żartuję. Nie ma tutaj menu!), Dopóki kolumna „Typ” pokaże tylko „Nonp”. Następnie naciśnij „b” (dwa razy, jeśli to konieczne), aby posortować wyświetlacz w kolejności malejącej według kolumny Bajty (tak jak to już tutaj zrobiono w przykładzie).
Następnie spójrz na kolumnę „Tag” dla najwyższego wiersza. W pokazanym tutaj (oczywiście sztucznym) przypadku jest to „wyciek”. (W tym systemie jest uruchomiony sterownik, który został celowo zepsuty, aby spowodować ten problem - to „nieszczelna” pula niestronicowana).
btw, podświetlone linie to te, które zmieniły się od czasu poprzedniej aktualizacji tego archaicznego ekranu.
Teraz wyszukaj c: \ Windows \ System32 \ Drivers w poszukiwaniu pliku .sys zawierającego ten ciąg. W takim przypadku będziesz szukać „Przeciek”, jak poniżej:
Następnie wyszukaj w Internecie odniesienia do tego ciągu i / lub nazwy sterownika.
Pomocny byłby również powrót tutaj i zgłoszenie pełnej nazwy, nazwy producenta itp. Z pliku .sys.
(Założę się, że tag, który znajdziesz, to ECMC, sterownik to intmsd.sys i jest on powiązany z produktem o nazwie ExpressCache lub IntelliMemory. Chciałbym „odinstalować” ten produkt. Jest aktualizacja, aby rozwiązać problem, ale nawet ze stałą wersją nigdy nie widziałem poprawy wydajności systemu przez ten produkt; zasadniczo powiela on funkcje, które są już w systemie Windows).
Jeśli nie możesz go znaleźć w ten sposób, następnym krokiem jest skorzystanie z „Zestawu narzędzi wydajności systemu Windows”. Przeszukaj to forum w poszukiwaniu tego ciągu, z odpowiedziami od magicandre1981, aby uzyskać instrukcje. Zignoruj odpowiedzi, które wspominają o xperf - jest to starsza wersja narzędzia.
AKTUALIZACJA: Zgodnie z komentarzami PO dokonał powyższego i stwierdził, że chociaż poolmon zgłosił, że całkowity rozmiar puli niestronicowanej był rzeczywiście ogromny, wszystkie przydzielone elementy były najwyraźniej małe. Moja hipoteza (także w komentarzach) jest taka, że wynika to z tego, co nazywam pulą „rozdętą”: Pula została przydzielona, a następnie zwolniona, ale z jakiegoś powodu ilość pamięci RAM przydzielonej do puli nie została zmniejszona, aby odzwierciedlić „uwolnienie” . Postępując zgodnie z procedurą opisaną w tej odpowiedzi przez magicandre, można zidentyfikować winowajcę.
źródło
poolmon
dzisiaj, jeśli będę miał czas, i spróbuję przeczytać twoją odpowiedź również uważniej, aby upewnić się, że ją rozumiem. Mówisz, że prawdopodobnie wyciek pamięci? Jeśli tak, jest to całkowicie prawdopodobne, ponieważ pracujemy nad oprogramowaniem znanym z okropnych wycieków pamięci.poolmon.exe
na danym serwerze i zredagowałem moje pytanie, aby dołączyć zrzut ekranu.poolmon
stwierdza, że mam pulę niestronicowaną o wielkości 6 GB (jak wskazałeś na moim zrzucie ekranu Menedżera zadań), ale kiedy patrzę tylko na procesy „Nonp” i sortuję według rozmiaru, wszystkie są małe (największa to 8 MB). Czy masz jakieś pomysły, dlaczegopoolmon
nie wykrywasz dużej części puli niestronicowanej?