Opłata za zatwierdzenie jest pełna w 100%, ale pamięć fizyczna wynosi tylko 60%, gdy nie używa się pliku strony

24

Wyłączyłem plik stronicowania w moim systemie (dysk twardy jest zbyt wolny, nie mogę od razu kupić nowego, nie mogę przenieść pliku stronicowania na inną partycję). Gdy zajrzę do Monitora zasobów, używając aplikacji wymagających pamięci, system pokazuje, że opłata zatwierdzenia jest prawie w 100% pełna. Rzeczywiście, jeśli nadal wymagam więcej pamięci, programy zaczynają się zawieszać, gdy ładowanie zatwierdzenia faktycznie osiąga 100%.

Tymczasem system mówi, że używam tylko 50–60% pamięci fizycznej i mam około 1 GB dostępnej pamięci (wolna + gotowość).

Jeśli opłata za zatwierdzenie jest faktycznie żądaną całkowitą pamięcią, dlaczego system mówi, że tyle pamięci jest wolne? Czy system Windows nie używa pamięci fizycznej? Czy wykres pamięci jest nieprawidłowy? Czy coś brakuje?

Zatwierdź wykres ładowania vs Wykres pamięci fizycznej Menadżer zadań

Jason Oviedo
źródło
2
Inna dobra odpowiedź na ten temat jest tutaj: brandonlive.com/2010/02/21/measuring-memory-usage-in-windows-7 .
2015 r
@cnst Bardzo dobry artykuł. Pomogło mi to lepiej zrozumieć ten problem. Dlaczego nie opublikujesz go w odpowiedzi?
Jason Oviedo
2
Proszę nie wyłączać plików stronicowania. To głupi pomysł
Milney,
@Milney Zgadzam się, zwykle nie należy wyłączać pliku strony. W momencie pytania miało to dla mnie sens, ponieważ dysk był po prostu zbyt wolny, tak bardzo, że okaleczył mój system. Było to całkiem przydatne, oprócz pytania, ogólna reakcja systemu poprawiła się wiele razy.
Jason Oviedo
@JasonOviedo Nie powinno tak być i wskazuje, że coś jest bardzo nie tak. Dawanie systemowi większej liczby opcji NIE powinno spowalniać jego działania. System nie musi używać pliku strony tylko dlatego, że go ma. (Co oznacza, że ​​jest to prawdopodobnie pytanie XY. Prawidłowe pytanie dotyczy właśnie tego, dlaczego plik stronicowania spowolnił system.)
David Schwartz

Odpowiedzi:

25

Skończył się limit zatwierdzeń, gdy wciąż masz dużo dostępnej pamięci RAM, wcale nie jest niczym niezwykłym. Ani limit zatwierdzania, ani opłata zatwierdzania nie są bezpośrednio związane z wolną lub dostępną pamięcią RAM.

Limit zatwierdzeń = bieżący rozmiar pliku strony + rozmiar pamięci RAM.

Ponieważ nie masz pliku strony, limit zatwierdzeń jest mniejszy niż byłby, gdybyś miał plik strony. Nie ma znaczenia, ile pamięci RAM jest wolne . Dla limitu zatwierdzeń liczy się tylko ilość zainstalowanej pamięci RAM . Możesz skończyć limit zatwierdzania nawet przy 90% wolnej pamięci RAM lub dostępnej.

Opłata za zatwierdzenie jest liczbą pamięci wirtualnej, a nie fizycznej. Załóżmy, że mój program prosi o zatwierdzenie 2 GB, ale uzyskuje dostęp tylko do 0,5 GB. Pozostałe 1,5 GB nigdy nie zostanie uszkodzone, nigdy nie zostanie przypisane do pamięci RAM, więc użycie pamięci RAM nie odzwierciedla 2 GB, tylko 0,5 GB.

Mimo to „zatwierdzanie systemu” zostało zwiększone o 2 GB, ponieważ system „zobowiązał się”, że BĘDZIE miejsce na moje 2 GB, na wypadek, gdyby rzeczywiście potrzebowałem tego wszystkiego. Fakt, że w danym uruchomieniu programu niekoniecznie będę próbował go użyć, nie pomaga. Poprosiłem o 2 GB, a pomyślny powrót z tego połączenia mówi mi, że system operacyjny „zobowiązał się” - tj. Obiecał - że mogę użyć tyle wirtualnej przestrzeni adresowej. System operacyjny nie może dać tej obietnicy, chyba że jest miejsce, w którym można to wszystko zatrzymać.

Więc: odłóż plik strony z powrotem, dodaj więcej pamięci RAM lub uruchom mniej rzeczy za jednym razem. Lub jakąś kombinację tych trzech. Są to jedyne opcje uniknięcia błędów związanych z brakiem pamięci i brakiem pamięci.

Zobacz także moje odpowiedzi tutaj (dłużej) i tutaj (znacznie dłużej).

Jamie Hanrahan
źródło
3
W szczególności, zanim Windows przydzieli pamięć, chce być w stanie zagwarantować, że będzie w stanie zrealizować te alokacje, gdy są one używane. Nawet jeśli alokacje nie są w pełni wykorzystane, system Windows odmówi alokacji więcej, jeśli nie będzie w stanie zapewnić tej gwarancji. Plik stronicowania, używany lub nie, zapewnia dodatkowe miejsce do przechowywania kopii zapasowych.
Bob
4

Jak pokazuje test alokacji pamięci w artykule na stronie http://brandonlive.com/2010/02/21/measuring-memory-usage-in-windows-7/ , Windows jest rodzajem systemu, który zawiódłby dużą alokację pamięci jeśli taka alokacja wraz ze wszystkimi wcześniejszymi alokacjami (koncepcja, którą Microsoft nazywa „zatwierdzeniem”), spowodowałaby, że całkowite „zatwierdzenie” przekroczyło zarówno sumę pamięci fizycznej, jak i sumę wszystkich plików stron (zamiana).

Należy wziąć pod uwagę, że sama alokacja nie korzysta z żadnej rzeczywistej pamięci (ani fizycznej, ani wymiennej), zanim nastąpi odczyt lub zapis w wirtualnej przestrzeni adresowej procesu dla wyżej wymienionej alokacji. Np. Przydział 2 GB sam w sobie wpływałby tylko na numery „Zatwierdź” (w rozmowie z Windows 7), pozostawiając „Pamięć fizyczną” samą (aż do odczytu / zapisu w ramach wspomnianego przydziału).

Jeśli chodzi o projekt systemu operacyjnego, alternatywnym podejściem byłoby zawsze zezwolenie na alokację dowolnego rozmiaru (chyba że dostępna pamięć jest już całkowicie wyczerpana), a następnie pozwolić aplikacjom na awarię podczas odczytu / zapisu. Aby uzyskać więcej informacji, zobacz https://cs.stackexchange.com/questions/42877/when-theres-no-memory-should-malloc-or-read-write-fail .

cnst
źródło
2
Tak. Argument za podejściem Windows: uzasadnione jest oczekiwanie, że programiści sprawdzą status malloc (lub w Win32, VirtualAlloc). Po udanym wywołaniu program może zaufać, że przydzielony vas jest użyteczny i pozostanie nim aż do odpowiedniego darmowego lub VirtualFree. Z drugiej strony zwykła pamięć odczytuje i zapisuje (tj. Dereferencje wskaźników) może powodować wyjątki dostępu do pamięci. Ale żaden programista nie spodziewa się, że będzie musiał sprawdzać status po każdym dereferencji wskaźnika. I tak nie zwracają statusu, więc musiałoby to zostać wykonane za pomocą procedury obsługi wyjątków. Brzydki.
Jamie Hanrahan,
2

Dostępna pamięć nie jest taka, jak myślisz. Nie niewykorzystane, tak naprawdę, pamięć podręczna plików ostatnio zakończonych procesów lub przyciętych procesów, które zostały zmuszone do oddania pamięci innym procesom. Można je było przywrócić do pierwotnego celu. zobacz więcej szczegółów.

http://support.microsoft.com/kb/312628

Jeśli nie ma pliku strony, jest to bardzo złe. Windows słabo degraduje bez niego. Pamiętaj, że nawet pliki wykonywalne są używane jako pliki wymiany, gdy nie ma pliku strony. Nawet jeśli dysk jest wolny, lepiej mieć plik stronicowania, dopóki nie uzyskasz od 8 do 16 gigabajtów pamięci. Niektórzy uważają, że nawet Windows 7 może wtedy działać bez niego.

Regularnie poprawiam starą maszynę, wykonując kilka czynności. Wyczyść dysk twardy tak bardzo, jak to możliwe. Skopiuj wszystko, co możesz tymczasowo usunąć z dysku na kopię zapasową. Usuń aplikacje, których nie potrzebujesz. Usuń aplikacje można zainstalować ponownie.

Po tym wszystkim zdefragmentuj dysk twardy. W tym momencie utwórz ponownie plik strony. Będzie on jak najbliżej przodu napędu. Utwórz stały rozmiar około 1,5 raza w pamięci. To moja reguła, zwykle widziałem rozmiary między 1 a 3 pamięcią czasu. To da mu niewielki wzrost prędkości w stosunku do zwykłych miejsc, w których byłby umieszczony.

Korzystam z auslogic defrager - jest darmowy (reklamy na więcej narzędzi). Są też inne, które to robią. Sprawdź defragers na portableapps.com. Optymalizuje dysk, umieszczając ostatnio używane pliki w pobliżu przedniej części dysku, aby uzyskać szybszy dostęp. Pokazuje, gdzie jest umieszczony plik strony, dzięki czemu można sprawdzić, czy przeniesiono go do 25% górnej części dysku.

Następnie zainstaluj ponownie aplikacje i skopiuj dane.

Powiedziałbym, że dostajesz 10 lub 20% doładowania. Ale główna wartość polega na tym, że wiele wahań odchodzi, aby zapewnić płynniejsze wrażenia.

Nelson Asinowski
źródło
3
Korzystając z niektórych testów, jest dla mnie jasne, że gdy dysk jest zbyt wolny, brak pliku strony rzeczywiście przyspiesza system. Potrafię odróżnić wiele sekund w prostych zadaniach, takich jak przełączanie aplikacji.
Jason Oviedo
@ Mark Mylisz się. Zdecydowana większość systemów Windows działa z plikiem stronicowania (ponieważ tak właśnie działa system Windows, z uzasadnionego i wystarczającego powodu) i prawie wszystkie z nich używają dysków o podobnej prędkości. I prawie żaden z nich nie wykazuje takich problemów. Problemem nie jest „plik stronicowania”, ale to, że nie masz wystarczającej ilości pamięci RAM. Pamiętaj, że pozbycie się pliku stronicowania nie eliminuje stronicowania do iz dysku - po prostu eliminuje jeden z zazwyczaj setek plików, które są zwykle zaangażowane w stronicowanie.
Jamie Hanrahan,