Dlaczego całkowite użycie pamięci zgłoszone przez Menedżera zadań systemu Windows jest znacznie wyższe niż suma zużycia pamięci przez wszystkie procesy? [duplikować]

98

Menedżer zadań pokazuje moje całkowite użycie pamięci na poziomie 90% mojej całkowitej 6 GB, ale żaden pojedynczy proces nie zużywa więcej niż 250 MB pamięci RAM, a suma wykorzystania pamięci RAM przez wszystkie uruchomione procesy jest mniejsza niż 2 GB. Próbowałem:

  • Patrząc na liczby w kolumnie „Pamięć” na karcie „Procesy” w Menedżerze zadań Windows 8.
  • Patrząc na kolumny „Zestaw roboczy”, „Prywatny zestaw roboczy”, „Wspólny zestaw roboczy” i „Rozmiar zatwierdzenia” na karcie „Szczegóły” w Menedżerze zadań.
  • Patrząc na podobne kolumny związane z pamięcią w Process Explorer.
  • Próbowałem uruchomić Sysinternals RAMMap, ale gdy mam kryzys niskiej pamięci, zawiesza się przy uruchomieniu. Po rozwiązaniu problemu RAMMap działa normalnie, ale w tym momencie jest już za późno.

Wszystkie pokazują dość małą ilość używanej pamięci.

Wiele osób zadaje warianty tego pytania z różnymi wersjami systemu Windows w całym Internecie. Niektórym z nich udało się rozwiązać problemy z brakiem pamięci, często przez ponowną instalację oprogramowania; czasami przez ponowną instalację systemu Windows od zera. Szukam odpowiedzi na ogólne pytania, na które te wszystkie pytania się zgadzają, i na które nigdy nie wydaje się, aby uzyskać odpowiedź gdzie indziej:

  1. Dlaczego łączna używana pamięć jest znacznie wyższa niż pamięć wykorzystywana przez wszystkie wymienione procesy, bez względu na to, jak próbuję je policzyć?
  2. W jaki sposób system Windows mógł „wiedzieć”, że pamięć jest używana, nie wiedząc, który program jej używa?
  3. Jakie procesy mogą zużywać pamięć, ale nie pojawiają się na liście?
  4. Czy istnieje oprogramowanie, które może dostarczyć więcej informacji na temat używanej pamięci?

Szczegóły specyficzne dla mojego problemu: Od czasu uaktualnienia do systemu Windows 8.1 problem pojawia się natychmiast po zalogowaniu. Skończy mi się pamięć, jak tylko uruchomię jakiś program. Zauważyłem w Process Explorer, że uruchomiono kilka instancji iexplore.exe, najwyraźniej uruchomionych automatycznie. Jednym z konkretnych przypadków było użycie tylko kilku MB pamięci RAM, ale pokazało setki milionów błędów stron. Pod wpływem kaprysu zabiłem ten konkretny proces, a użycie pamięci natychmiast spadło o 70%.

Prowadząc do jednego konkretnego pytania:

  • Jak zabicie jednego procesu, który podobno zużył tylko kilka MB, może zwolnić kilka GB?

I (prawdopodobnie trudne) pytanie bonusowe:

  • Jak mogę zrezygnować z ponownej instalacji systemu Windows za każdym razem, gdy uruchamiam ponownie komputer?
Josh
źródło
3
również pamięć jądra ma znaczenie. Prześlij zdjęcie RAMMAp: blogs.technet.com/b/askperf/archive/2010/08/13/…
magicandre1981
2
Myślę, że pytanie powinno brzmieć „Dlaczego brakuje mi pamięci”.
surfasb
Na to pytanie nie można odpowiedzieć bez konkretów. Wyświetl listę zainstalowanych programów. Lub jeszcze lepiej, zrzut uruchomionych procesów z Monitora wydajności.
surfasb
1
Czy faktycznie wyłączasz / restartujesz komputer całkowicie, czy używasz hybrydowego zamykania systemu (domyślnie w Windows 8)? Po przejściu na system Windows 8 miałem podobny problem. Zakładam, że jeden sterownik zabierał coraz więcej mojej fizycznej pamięci RAM i nie zwrócił jej nawet po wyłączeniu i włączeniu komputera. W ciągu kilku tygodni zgromadził się do kilku gigabajtów. Więc teraz co kilka dni klikam „uruchom ponownie” lub przytrzymuję Shift, klikając „zamknij”, aby faktycznie wyłączyć komputer.
Robert
2
W moim przypadku była to pamięć „Driver Locked”, zarezerwowana przez Hyper-V ze względu na włączenie „Dynamic Memory”. Musiałem zatrzymać wszystkie maszyny wirtualne, wyłączyć ustawienie i ponownie je uruchomić. Dzięki za sugestię RAMMap.
Dagelf

Odpowiedzi:

7

Nawiasem mówiąc, powinieneś starać się nie używać terminu „pamięć”. Powoduje to wiele zamieszania. Jeśli masz na myśli pamięć fizyczną, powiedz „pamięć fizyczna” lub „RAM”. Jeśli masz na myśli pamięć wirtualną, powiedz to. Jeśli masz na myśli sklep z podkładem, powiedz to.

Dlaczego łączna używana pamięć jest znacznie wyższa niż pamięć wykorzystywana przez wszystkie wymienione procesy, bez względu na to, jak próbuję je policzyć?

Ponieważ system operacyjny nie marnuje pamięci fizycznej (RAM), chyba że nie ma wyboru.

W jaki sposób system Windows mógł „wiedzieć”, że pamięć jest używana, nie wiedząc, który program jej używa?

Ponieważ żaden program go nie używa. Rozważmy na przykład pamięć zawierającą kod właśnie zakończonego programu. Żaden program go nie używa. Ale ta pamięć jest używana, ponieważ nie jest wolna i zawiera dane, które mogą być przydatne (na wypadek, gdyby program uruchomił się ponownie).

Jakie procesy mogą zużywać pamięć, ale teraz pojawiają się na liście?

Nie jest wykorzystywany przez procesy.

Czy istnieje oprogramowanie, które może dostarczyć więcej informacji na temat używanej pamięci?

RAMMap może to zrobić.

Istnieją tylko dwie możliwości: można użyć pamięci RAM lub zmarnować. Oczywiście pierwszy jest lepszy. Każda wolna pamięć jest marnowana na zawsze - urządzenie o pojemności 4 GB nie może dziś zużyć 2 GB, aby jutro użyć 6 GB. Jeśli myślisz „Chcę go teraz bezpłatnie, abym mógł go później użyć”, zapomnij o tym. Możesz go użyć teraz, a później.

Jak zabicie jednego procesu, który podobno zużył tylko kilka MB, może zwolnić kilka GB?

Kończy Ci się zapasowy sklep, a nie pamięć fizyczna. Masz dużo wolnej pamięci fizycznej, ale nie masz wystarczającej ilości kopii zapasowych dla systemu operacyjnego, aby nadal alokować pamięć wirtualną, która może wymagać tworzenia kopii zapasowych.

Proces wykorzystywał tylko kilka MB pamięci fizycznej, ale system operacyjny mógł zarezerwować dla niej kilka GB kopii zapasowej pamięci wirtualnej. Załóżmy na przykład, że proces tworzy zapisywalne, prywatne mapowanie pamięci pliku 2 GB. System operacyjny musi zarezerwować 2 GB kopii zapasowej pamięci wirtualnej dla procesu, ponieważ może zapisywać do każdego bajtu tego odwzorowania. Ponadto może nigdy nie napisać do żadnego z nich. Dlatego potrzebujesz dobrej wielkości pliku stronicowania.

Współczesne systemy operacyjne zapisują wiele testów (obiecujący magazyn kopii zapasowych), które nigdy nie zostaną zrealizowane (wymagają pamięci RAM). Nie możesz nadal wystawiać czeków (obiecujący sklep z zabezpieczeniami), nawet jeśli masz dużo pieniędzy w banku (wolna pamięć RAM), jeśli już napisałeś kilka dużych czeków, które mogą zostać zrealizowane lub nie (zrealizowane jako tyle, że wsparcie jak masz). Pliki stronicowania dodają magazyn kopii zapasowych, umożliwiając systemowi operacyjnemu zapisywanie czeków.

David Schwartz
źródło
14
PS: Używam słowa „pamięć” nie dlatego, że nie znam różnicy między pamięcią RAM a maszyną wirtualną, ale dlatego, że mój komputer mówi mi tylko, że zabrakło „pamięci”, nie informując mnie w ogóle, co to właściwie jest znaczy. (Zakładam, że oznacza to RAM, z powodów, które podałem w poprzednim komentarzu, ale nie jestem pewien.) Wolę, abyś użył prawdziwego słownictwa (który mogę sprawdzić w razie potrzeby) niż skomplikowanych metafor finansowych :)
Josh
91
-1, ponieważ po przeczytaniu odpowiedzi i wszystkich komentarzy nadal nie jest jasne, dlaczego całkowita pamięć używana jest znacznie wyższa niż pamięć używana przez wszystkie wymienione procesy.
Bennett McElwee,
6
Ta terminologia, w której pamięć jest „używana”, mimo że żaden program jej nie używa, jest zupełnie odmienna od zwykłego znaczenia słów takich jak „używane” i „wolne” - być może jest to terminologia Microsoftu, nie twoja. W każdym razie, przypuśćmy, że na przykład 50% pamięci RAM jest obecnie używane przez uruchomione programy, a 25% nie jest używane przez żaden uruchomiony program, ale zawiera dane, które mogą być przydatne w przyszłości, ale mogą być również odrzucone. Dodając je do siebie i wyświetlając „Pamięć: 75%”, użytkownik nie przekazuje żadnych użytecznych informacji. Myślę, że stąd bierze się powszechne zamieszanie.
Bennett McElwee,
2
@BennettMcElwee Nie ma dobrego sposobu na ograniczenie zużycia pamięci do jednego prostego numeru, ale użytkownicy nalegają na to. Stawia to programistów w niewygodnej pozycji - mogą podać numer, który nie zawsze jest pomocny lub nie podać numeru. Większość deweloperów systemów operacyjnych i GUI wybiera pierwszą opcję - podaje liczbę, która prowadzi do wielu nieporozumień. Jeśli twoje pytanie brzmi: „czy więcej pamięci RAM poprawiłoby mój system”, odpowiedź brzmi - bardzo, bardzo trudno powiedzieć, nawet ekspertom.
David Schwartz
2
@DavidSchwartz Twoja odpowiedź tego nie wyjaśnia, po prostu stwierdza. Czy możesz podać jakieś linki do poparcia tego konkretnego roszczenia? Interpretuję „Pamięć fizyczna XX%”, co oznacza, że ​​XX% fizycznie zainstalowanej pamięci RAM jest obecnie używane i jest niedostępne dla innych procesów. Uważam, że zostałem potwierdzony faktem, że powyżej 90% system staje się podatny na zawieszanie się, a gdy aplikacje próbują przydzielić pamięć powyżej 100%, całkowicie się zawieszają. Z mojego doświadczenia wynika, że ​​nie jest to standardowy system, w którym działa większość systemów.
John Neuhaus,