Ostrzeżenia o niskiej pamięci w systemie Windows 10, gdy mam dużo dostępnej pamięci

25

Wystąpił problem polegający na tym, że jeśli mój system działa przez kilka dni bez ponownego uruchomienia, zacznę otrzymywać ostrzeżenia z informacją „Zamknij programy, aby zapobiec utracie informacji”, a następnie dialog sugerujący zamknięcie programów, które mogę anulować lub nacisnąć „zamknij programy”, a system Windows wymusi zamknięcie niektórych lub wszystkich aplikacji wymienionych w oknie dialogowym.

Otwieram menedżera zadań i widzę, że obecnie wykorzystuje się tylko około 30% mojej pamięci:

33% wykorzystania

Kiedy otwieram monitor zasobów, aby zobaczyć, ile pamięci zajętej jest wykorzystywane przez określone aplikacje, nadal widzę stosunkowo niskie zużycie pamięci:

Monitor zasobów

Przez jakiś czas miałem ten problem i starałem się znaleźć rozwiązanie. Badałem przyczyny, takie jak wyciek sterownika za pomocą poolmon, ale nigdy nie widziałem w poolmon niczego, co pasowałoby do tego, co inni opisali jako czerwone flagi dla przecieku pamięci sterownika. To, co mnie szczególnie zagubiło, to to, dlaczego Win10 każe mi zamykać aplikacje, gdy mam tylko 33% pamięci systemowej.

Brandon
źródło
3
Spróbuj przejść do menedżera zadań i przejdź do karty wydajności. Co pokazuje zatwierdzone pole pamięci ?
DrZoo
Nie zapisałem zrzutu ekranu, ale moja zaangażowana pamięć stanowiła wysoki procent dostępnego, około 17,5 GB / 19 GB.
Brandon

Odpowiedzi:

15

Dzikie domysły tutaj.

Wyłączyłeś plik wymiany, postępując zgodnie z losowymi wskazówkami dotyczącymi optymalizacji.

Masz jakiś sterownik systemu operacyjnego, który chce dużego bloku kolejnych fizycznych pamięci RAM. Ale nie może tego uzyskać, ponieważ cała fizyczna pamięć RAM została z czasem podzielona. A ponieważ plik wymiany jest wyłączony, nie można wykonać defragmentacji pamięci RAM.

Włącz plik wymiany.

Jak powiedziałem, zgadnijcie.

Zan Lynx
źródło
Mam ustawiony rozmiar pliku strony wynoszący maksymalnie 3 GB. Czy to rozumiesz przez swapfile, czy jest to osobno zarządzana rzecz w systemie Windows 10? To nie jest niemożliwe, zrobiłbym coś takiego, miałem bardzo złe problemy z wydajnością, kiedy pierwszy raz zbudowałem tę maszynę w 10/2015 i próbowałem kilku rzeczy, takich jak wyłączenie parkowania rdzenia, aby to naprawić. Skończyło się na tym, że był schemat zarządzania energią, który zmniejszał moją moc do około 10% i głodował wszystkie komponenty, i dlatego miałem problemy z wydajnością systemu, ale możliwe, że mogłem zrobić coś takiego, jak powiedziałeś podczas tego odcinka.
Brandon
1
Zmień rozmiar pliku strony na „Zarządzany przez system”, a Twoje problemy prawdopodobnie znikną.
Scott Chamberlain,
Kiedyś miałem ten system zarządzany i nadal miałem ten sam problem, jego manifestacja zajęłaby więcej czasu. Gdy ustawię to w systemie zarządzanym, plik stronicowania osiągnie maksimum przy, jak sądzę, 64 GB, a następnie, gdy zatwierdzony poziom będzie naprawdę wysoki, nadal będę otrzymywać takie same ostrzeżenia o niskiej pamięci. Ale nadal widzę 70% dostępnej pamięci fizycznej i brak informacji w Monitorze zasobów, że ponad 60+ GB pamięci jest obecnie zaangażowanych w dowolny proces wymieniony na liście.
Brandon
W pełni zgadzam się z Zanem i Scottem, to twój plik strony powoduje ten problem (zobacz windowsitpro.com/windows-10/…, aby znaleźć inne źródło, które również to mówi). Ustaw system na zarządzany przez system, a jeśli problem pojawi się ponownie, NASTĘPNIE rozpocznij badanie.
Ƭᴇcʜιᴇ007
Więc myślę, że plik strony zarządzany przez system był tutaj główną odpowiedzią. Wydaje się, że ustawienie na statyczny 3 GB po prostu nie jest idealne w środowisku Windows 10. Zaimplementowałem to rozwiązanie kilka tygodni temu i pozwoliłem, aby działało w normalnym użyciu, aby zobaczyć, co się stało, i chociaż wciąż widzę o wiele więcej pamięci zaangażowanej, niż jest to uwzględnione w kolumnie Pamięć o zadeklarowanym Monitorze zasobów, nie mam za mało pamięci ostrzeżenia lub problemy teraz.
Brandon
14

Re twój ostatni Q - krótka wersja: Komunikat o błędzie dotyczy „zatwierdzonej” wirtualnej przestrzeni adresowej. Jeśli spojrzysz na wykres Commit Charge na swojej drugiej migawce ekranu, zobaczysz, że rzeczywiście jest on na granicy lub bardzo bliski.

Ilość pamięci RAM, która jest „wolna”, „dostępna” lub „w użyciu” nie ma znaczenia. W szczególności brak „dostępnej” pamięci RAM absolutnie nie jest przyczyną komunikatu „brak pamięci” lub „brak pamięci”.

Limit zatwierdzeń jest równy całkowitej pamięci RAM + rozmiar pliku strony. Gdy przydzielona pamięć jest przydzielana, jest natychmiast obciążana „ładowaniem zatwierdzenia”, nawet jeśli nie została jeszcze wykorzystana… co oznacza, że ​​nie jest natychmiast używana pamięć RAM lub PF. Przestrzeń fizyczna (czy to w pamięci RAM, czy w pliku stronicowania) jest wykorzystywana tylko wtedy, gdy pamięć jest faktycznie przywoływana. Odtąd musi być gdzieś, dopóki program go nie zwolni lub cały proces się zakończy.

Przykład: Załóżmy, że nie masz pliku stronicowania, dlatego limit zatwierdzeń wynosi 16 GB (rozmiar pamięci RAM). Teraz załóżmy, że każda z 8 procesów próbuje VirtualAlloc (MEM_COMMIT) 1 GB. Wynik: Opłata za zatwierdzenie zostanie zwiększona o 8 GB. Jednak nie ma bezpośredniego wpływu na pamięć RAM! To tak, jakbyś kupił kawałek papieru w sklepie papierniczym, ale tak naprawdę nie dostałeś żadnego papieru. Za każdym razem, gdy potrzebujesz nowego arkusza, pojawia się jeden magicznie. Aż wykorzystasz cały pad (rozmiar przydzielonego regionu).

Załóżmy teraz, że każdy z tych procesów uzyskuje dostęp do 100 MB z 1 GB. Użyta pamięć RAM wynosiłaby tylko 800 MB.

Ale ponieważ każdy z nich może odwoływać się do wszystkich swoich 1 GB, system operacyjny musi zapewnić, że 8 GB pamięci RAM + miejsce na plik stronicowania ... cóż, tylko pamięć RAM w przypadku braku pliku stronicowania ... jest dostępna na wypadek, gdyby tak się stało . Wracając do sklepu z artykułami papierniczymi, muszą mieć na stanie wystarczającą ilość papieru, aby dać każdemu tyle arkuszy, ile wcześniej kupili.

W związku z tym system operacyjny musi przestać pozwalać VirtualAlloc (MEM_COMMIT) odnieść sukces, gdy bieżąca zatwierdzona kwota przekroczy limit.

Czemu? Ponieważ oczekuje się, że proces sprawdzi wynik VirtualAlloc, aby sprawdzić, czy się powiódł. Po dokonaniu tego i stwierdzeniu, że alokacja się powiodła, proces ma pełne prawo oczekiwać, że kolejne odniesienia do całego zaangażowanego regionu powiodą się.

Jeśli system Windows zezwolił, aby opłata zatwierdzenia przekroczyła ilość dostępnego miejsca, aby zrealizować to miejsce, to oczekiwanie nie zawsze mogło zostać spełnione.

Szybkim obejściem jest zwiększenie domyślnego (= początkowego) rozmiaru pliku strony. Z powyższego wyjaśnienia powinieneś zobaczyć, dlaczego to pozwoli uniknąć komunikatu o błędzie, mimo że nic nie może zostać zapisane w tym pliku . Ponownie, system operacyjny zapewnia, że ​​miejsce na całą opłatę za zatwierdzenie jest dostępne w razie potrzeby . Gdy procesy przydzielają przydzieloną pamięć, mówią tylko „hej, OS, może potrzebuję tak bardzo”. To nie znaczy, że faktycznie z niego skorzystają, a to z pewnością nie oznacza, że ​​już go używali.

Aby uzyskać więcej, zobacz moją odpowiedź tutaj .

Teraz .... dlaczego używasz tyle zatwierdzeń, kiedy twoje procesy nie wydają się do tego sumować, to kolejne pytanie. Aby zacząć na to patrzeć, pokaż kartę Wydajność Menedżera zadań, sekcję Pamięć.

Jamie Hanrahan
źródło
Nie mam słów, aby opisać tak idealną odpowiedź. Dziękuję Ci.
Vinicius Tavares
-2

Inną możliwością jest to, że używasz Win10 w wersji 32-bitowej, a nie 64-bitowej. Chociaż masz zainstalowane 16 GB pamięci RAM, istnieją 32-bitowe ograniczenia systemu operacyjnego, które sprawiają, że korzystanie z niego jest praktyczne powyżej 4 punktów. Ponadto system operacyjny nałoży twarde limity / na proces / na jaką ilość pamięci RAM można zażądać, niezależnie od fizycznej pamięci RAM. W takim przypadku niewiele można zrobić poza przejściem na 64-bitowy system operacyjny lub jednoczesne uruchamianie mniejszej liczby aplikacji.

Mekki MacAulay
źródło
2
Nie byłoby możliwe uruchomienie Win10 w wersji 32-bitowej i wyświetlanie w Menedżerze zadań 16 GB, podobnie jak w OQ. A tak przy okazji, ograniczenia na proces, jakie system operacyjny stawia na pamięci wirtualnej, a nie pamięci RAM. Nie ma połączenia można wykonywać w systemie Windows przeznaczyć RAM per se . (Cóż, AWE, ale to wymaga uprawnień na poziomie administratora i prawie nic z tego nie korzysta, z wyjątkiem niektórych programów systemowych.) Przydzielasz wirtualną przestrzeń adresową (powiedzmy z VirtualAlloc), a następnie z niej korzystasz; podczas jego używania system operacyjny przydziela pamięć RAM procesowi („stronicowanie na żądanie”). Ale oczywiście nie wszystko musi być zrealizowane jednocześnie w pamięci RAM.
Jamie Hanrahan,