2014-03-11 02:46:08 +0000 2014-03-11 02:46:08 +0000
104
104
Advertisement

Dlaczego całkowite użycie pamięci raportowane przez Menedżera zadań Windows jest znacznie wyższe niż suma użycia pamięci przez wszystkie procesy?

Advertisement

Menedżer zadań pokazuje moje całkowite użycie pamięci na poziomie 90% z moich 6 GB, ale żaden pojedynczy proces nie używa więcej niż 250 MB RAM, a suma użycia pamięci RAM wszystkich uruchomionych procesów jest mniejsza niż 2 GB. Próbowałem:

  • Patrząc na liczby w kolumnie “Pamięć” w zakładce “Procesy” w Menedżerze zadań Windows 8.
  • Patrząc na kolumny “Zestaw roboczy”, “Prywatny zestaw roboczy”, “Współdzielony zestaw roboczy” i “Rozmiar zobowiązania” na karcie “Szczegóły” w Menedżerze zadań.
  • Spojrzenie na podobne kolumny związane z pamięcią w Process Explorerze.
  • Próbowałem uruchomić Sysinternals RAMMap, ale kiedy mam kryzys z niską pamięcią, zawiesza się on przy starcie. Kiedy rozwiążę problem, RAMMap działa normalnie, ale wtedy jest już za późno.

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

W całym Internecie jest mnóstwo ludzi zadających warianty tego pytania, z różnymi wersjami Windowsa. Niektórym z nich udaje się rozwiązać problemy z małą ilością pamięci, często poprzez przeinstalowanie oprogramowania, czasem poprzez zainstalowanie windowsa od nowa. Szukam odpowiedzi na ogólne pytania, które są wspólne dla wszystkich, a które nigdy nie doczekały się odpowiedzi w innych miejscach:

  1. Dlaczego całkowita używana pamięć jest znacznie wyższa niż pamięć używana przez wszystkie wymienione procesy, bez względu na to, jak próbuję je policzyć?
  2. Jak Windows może “wiedzieć”, że pamięć jest używana, nie wiedząc jaki program jej używa?
  3. Jakie procesy mogą zużywać pamięć, ale nie pojawiają się na liście?
  4. Czy istnieje jakieś oprogramowanie, które może dać więcej informacji o zużyciu pamięci?

Szczegóły specyficzne dla mojego problemu: Od czasu aktualizacji do Windows 8.1, problem pojawia się zaraz po zalogowaniu. Kończy mi się pamięć, gdy tylko uruchomię jakikolwiek program. Zauważyłem w Process Explorerze, że kilka instancji iexplore.exe było uruchomionych, najwyraźniej automatycznie. Jedna z nich zużywała tylko kilka MB pamięci RAM, ale pokazywała setki milionów błędów stron. Dla kaprysu, zabiłem ten konkretny proces, a zużycie pamięci natychmiast spadło o 70%.

Prowadzi to do jednego konkretnego pytania:

  • W jaki sposób zabicie jednego procesu, który rzekomo zużywał tylko kilka MB, mogło zwolnić kilka GB?

Oraz (przypuszczalnie trudne) pytanie dodatkowe:

  • Jak mogę uniknąć konieczności przechodzenia przez to przy każdym ponownym uruchomieniu komputera, bez reinstalacji systemu Windows?
Advertisement

Odpowiedzi (1)

6
6
6
2014-03-11 05:23:42 +0000

Przy okazji, powinieneś starać się nie używać terminu “pamięć”. Wprowadza on wiele zamieszania. Jeśli masz na myśli pamięć fizyczną, powiedz “pamięć fizyczna” lub “RAM”. Jeśli masz na myśli pamięć wirtualną, powiedz tak. Jeśli masz na myśli pamięć masową, powiedz tak.

Dlaczego całkowita używana pamięć jest znacznie wyższa niż pamięć używana przez wszystkie wymienione procesy, niezależnie od tego, jak próbuję je policzyć?

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

Skąd Windows może “wiedzieć”, że pamięć jest używana, nie wiedząc, jaki program jej używa?

Ponieważ żaden program jej nie używa. Rozważmy na przykład pamięć, która zawiera kod programu, który właśnie się zakończył. Żaden program jej nie używa. Ale ta pamięć jest używana, ponieważ nie jest wolna i zawiera dane, które mogą być przydatne (w przypadku ponownego uruchomienia programu).

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

Nie jest ona używana przez procesy.

Czy istnieje jakieś oprogramowanie, które może udzielić więcej informacji o używanej pamięci? RAMMap może to zrobić.

Są tylko dwie możliwości, pamięć RAM może być używana lub może być marnowana. Oczywiście pierwsza z nich jest lepsza. Każda wolna pamięć jest wiecznie marnowana - maszyna z 4GB nie może użyć 2GB dzisiaj, aby jutro użyć 6GB. Jeśli myślisz: “Chcę, żeby była wolna teraz, żebym mógł jej użyć później”, zapomnij o tym. Możesz użyć go teraz i użyć go później.

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

Kończy Ci się pamięć zapasowa, a nie pamięć fizyczna. Masz dużo wolnej pamięci fizycznej, ale niewystarczającą ilość pamięci zapasowej, aby system operacyjny mógł nadal alokować pamięć wirtualną, która może wymagać pamięci zapasowej.

Proces używał tylko kilku MB pamięci fizycznej, ale system operacyjny mógł być zmuszony do zarezerwowania dla niego kilku GB pamięci wirtualnej. Na przykład, załóżmy, że proces tworzy zapisywalne, prywatne odwzorowanie pamięci pliku o rozmiarze 2GB. System operacyjny musi zarezerwować 2 GB zabezpieczonej pamięci wirtualnej dla procesu, ponieważ może on zapisywać do każdego bajtu tego odwzorowania. Ponadto, może nigdy nie napisać do żadnego z nich. Dlatego właśnie potrzebujesz pliku stronicowania o dobrym rozmiarze.

Nowoczesne systemy operacyjne wypisują wiele czeków (obiecując backing store), które nigdy nie zostaną zrealizowane (wymagają pamięci RAM). Nie możesz ciągle wypisywać czeków (obiecywać backing store) nawet jeśli masz dużo pieniędzy w banku (wolnej pamięci RAM), jeśli już wypisałeś kilka dużych czeków, które mogą lub nie mogą zostać zrealizowane (obiecałeś tyle backing store ile masz). Pliki stronicowania dodają zapasowy magazyn, pozwalając systemowi operacyjnemu na dalsze pisanie czeków.

Pytania pokrewne

8
19
13
6
4
Advertisement