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:
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:
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.
źródło
Odpowiedzi:
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.
źródło
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ęć.
źródło
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.
źródło