Znajdź i napraw wycieki pamięci w systemie Windows 11/10

Wyciek pamięci(Memory Leak) to nieprawidłowe rozmieszczenie zasobów w programie komputerowym z powodu nieprawidłowej alokacji pamięci. Dzieje się tak, gdy nieużywana lokalizacja pamięci RAM pozostaje niewydana. Wycieku pamięci nie należy mylić z wyciekiem przestrzeni, który odnosi się do programu używającego więcej pamięci RAM(RAM) niż to konieczne. Mówi się, że wyciek pamięci w Windows 11/10/8/7 miał miejsce, gdy pamięć jest po prostu niedostępna, mimo że nie jest używana.

Wycieki pamięci w systemie Windows 11/10

Zanim zaczniesz, powinieneś wiedzieć, że wyciek pamięci(Memory) to problem z oprogramowaniem do debugowania – na przykład w Javie(Java) , JavaScript , C/C++, Windows , itp. Fizyczna wymiana pamięci RAM(RAM) lub dysku twardego nie jest wymagana.

Wyciek pamięci w systemie Windows 10

Czemu to jest złe

Oczywistym jest, że wyciek pamięci jest zły, ponieważ jest to błąd, wada systemu. Przekonajmy się jednak, jak dokładnie wpływa to na system:

  1. Ponieważ pamięć nie jest zwalniana, nawet gdy nie jest używana, powoduje to wyczerpanie pamięci.
  2. Wyczerpanie pamięci powoduje starzenie się oprogramowania.
  3. Zmniejszona ilość dostępnej pamięci prowadzi do wydłużenia czasu odpowiedzi i niskiej wydajności systemu.
  4. Niesprawdzony wyciek pamięci może ostatecznie doprowadzić do awarii aplikacji.

Aby zidentyfikować wyciek pamięci, programista musi mieć dostęp do kodu źródłowego programu.

Lokalizowanie wycieku

Aby rozwiązać problem, najpierw musimy go zidentyfikować. Podstawowe kroki w celu zlokalizowania wycieku pamięci to:

  1. Afirmacja(Affirmation) : Ustalenie, czy nastąpił wyciek.
  2. Znajdowanie wycieku pamięci w trybie jądra(Finding Kernel-mode memory leak) : lokalizowanie wycieku spowodowanego przez składnik sterownika trybu jądra.
  3. Znajdowanie wycieku pamięci w trybie użytkownika(Finding User-mode memory leak) : lokalizowanie wycieku spowodowanego przez sterownik lub aplikację w trybie użytkownika.

Przydział pamięci

Istnieją różne tryby, w których aplikacje alokują pamięć RAM(RAM) . Jeśli miejsce nie zostanie zwolnione po użyciu, przeciek pamięci wystąpi niezależnie od trybu alokacji. Niektóre typowe wzorce alokacji to:

  1. Funkcja HealAlloc(HealAlloc) do alokacji pamięci sterty. Odpowiedniki środowiska uruchomieniowego C/C++ to malloc i nowe.
  2. Funkcja VirtualAlloc(VirtualAlloc) do bezpośredniej alokacji z systemu operacyjnego.
  3. Interfejsy API Kernel32(Kernel32 APIs) do przechowywania pamięci jądra dla aplikacji. Przykład(Example) , CreateFile , CreateThread .
  4. Interfejsy API użytkownika 32 i interfejsy API Gdi32.

Zapobiegaj wyciekom pamięci w systemie Windows

Wszyscy wiemy, że lepiej zapobiegać niż leczyć, więc oto kilka sposobów zapobiegania wyciekom pamięci.

Monitorowanie nawyków

Wycieki pamięci w systemie Windows 10

Należy zwracać uwagę na nieprawidłowe użycie pamięci RAM(RAM) przez poszczególne programy i aplikacje. Możesz przejść do Menedżera zadań Windows(Windows Task Manager) , naciskając CTRL+SHIFT+ESC i dodać kolumny, takie jak Uchwyty(Handles) , Obiekty użytkownika(User Objects) , Obiekty GDI(GDI Objects) itp.

Pomoże to w łatwym monitorowaniu wykorzystania zasobów.

Przeczytaj(Read) : Jakie są rodzaje pamięci w komputerze?(What are the Types of Memory in a computer?)

Narzędzia firmy Microsoft(Microsoft) do diagnozowania wycieków pamięci

Różne narzędzia diagnozują wycieki pamięci dla różnych trybów alokacji:

  1. Application Verifier diagnozuje przecieki sterty.
  2. UMDH (składnik narzędzi do debugowania systemu Windows(Windows Debugging Tools) ) diagnozuje przecieki dla poszczególnych procesów, monitorując alokacje pamięci sterty.
  3. Trace Capture do dokładnej analizy wykorzystania pamięci RAM(RAM) .
  4. Xperf również śledzi wzorce alokacji sterty.
  5. CRT Debug Heap nie tylko śledzi alokacje sterty, ale także umożliwia praktyki kodowania w celu zminimalizowania przecieków.
  6. JavaScript Memory Leak Detector debuguje wycieki pamięci w kodach.

Wskazówki dotyczące użytkowania

  1. Użyj jądra HANDLE i innych inteligentnych wskaźników dla zasobów Win32 i alokacji sterty.(Win32)
  2. Pobierz(Get) klasy do automatycznego zarządzania zasobami dla alokacji jądra z biblioteki ATL . Standard C++ ma auto_ptr do alokacji sterty.
  3. Hermetyzuj(Encapsulate COM) wskaźniki interfejsu COM w „inteligentnych wskaźnikach” za pomocą _com_ptr_t lub _bstr_t lub _variant_t .
  4. Monitoruj(Monitor) kod .NET pod kątem nieprawidłowego użycia pamięci.
  5. Unikaj(Avoid) wielu ścieżek wyjścia dla funkcji, aby umożliwić uwolnienie alokacji od zmiennych w większości bloków na końcu funkcji.
  6. Używaj(Use) natywnych wyjątków tylko po zwolnieniu wszystkich alokacji w bloku _finally . Zawijaj(Wrap) wszystkie sterty i obsługuj alokacje w inteligentnych wskaźnikach, aby używać wyjątków C++.
  7. Zawsze wywołuj funkcję PropVariantClear przed ponownym zainicjowaniem lub odrzuceniem obiektu PROPVARIANT .

Rozwiązywanie problemów(Troubleshoot) z wyciekami pamięci w systemie Windows(Windows)

Podobnie jak różne sposoby zapobiegania wyciekom pamięci, istnieją różne sposoby na zatrzymanie wycieków pamięci. Ale zanim zaczniesz, pamiętaj, aby najpierw utworzyć punkt przywracania systemu .

1] Zamknij procesy i uruchom ponownie.

Jeśli zauważysz, że niepotrzebny proces zajmuje zbyt dużo pamięci RAM(RAM) , możesz zakończyć proces w Menedżerze zadań(Task Manager) . Konieczne będzie ponowne uruchomienie urządzenia, aby zwolnione miejsce było dostępne do użycia przez inne procesy. Bez ponownego uruchomienia(Restart) problem wycieku pamięci nie zostanie rozwiązany. Jednym szczególnym procesem, który ma błędy, które spowalniają komputer, jest Runtime Broker . Spróbuj, czy samo wyłączenie tego działa.

2] Narzędzia diagnostyczne pamięci

Diagnostyka pamięci systemu Windows

Aby uzyskać dostęp do wbudowanego narzędzia diagnostycznego pamięci(Memory Diagnostic Tool) dla systemu Windows:

  1. Zapisz całą swoją ważną pracę.
  2. Naciśnij Win + R , aby otworzyć okno Uruchom(Run) .
  3. Wpisz polecenie mdsched.exe w oknie Uruchom(Run) .
  4. Uruchom ponownie komputer.
  5. Po ponownym uruchomieniu wykonaj podstawowe skanowanie lub przejdź do opcji „ Zaawansowanych(Advanced) ”, takich jak „ Mieszanka testowa(Test mix) ” lub „ Liczba przejść(Pass count) ”.
  6. Naciśnij klawisz F10 , aby rozpocząć test.

To wciąż są tymczasowe poprawki.

3] Sprawdź aktualizacje sterowników

Zaktualizuj oprogramowanie sterownika

Nieaktualne sterowniki powodują wycieki pamięci. Aktualizuj wszystkie sterowniki :

  1. Naciśnij Win + R i otwórz okno Uruchom(Run) . Wpisz devmgmt.msc i naciśnij Enter . Przeniesie Cię do Menedżera urządzeń(Device Manager) .
  2. Sprawdź(Check) , czy nie ma nieaktualnych sterowników i zaktualizuj je wszystkie.
  3. Aby uzyskać aktualizacje, które mogłeś przegapić, sprawdź Windows Update .

To było proste.

4] Optymalizacja wydajności

Dostosuj do najlepszej wydajności

Dostosowanie systemu Windows pod kątem wydajności pozwoli zarządzać wszystkim, w tym planowaniem procesora i wykorzystaniem pamięci, aby zapobiec wyciekom pamięci. Wykonaj następujące kroki:

  1. Kliknij prawym przyciskiem myszy „ Ten komputer(This PC) ” i wybierz „ Zaawansowane(Advanced) ” ustawienia w lewym okienku.
  2. W zakładce „ Zaawansowane(Advanced) ” przejdź do „ Wydajność(Performance) ”, a następnie „ Ustawienia(Settings) ”.
  3. Zaznacz opcję „ Dostosuj, aby uzyskać najlepszą wydajność(Adjust for best performance) ” i kliknij OK .
  4. Uruchom ponownie(Restart) i sprawdź, czy problem został rozwiązany.

Jeśli to proste rozwiązanie nie zadziałało, wypróbuj następne rozwiązanie.

5] Wyłącz programy(Programs) działające podczas uruchamiania(Startup)

Programy startowe

Wyłączenie kłopotliwych programów to jedyny sposób na pozbycie się problemu z wyciekiem pamięci. Przejdź do Menedżera zadań(Task Manager) i wyłącz program powodujący problemy. Jeśli nie wiesz, które programy powodują problemy, zrób tak:

  1. Przejdź do „ Menedżera zadań(Task Manager) ”.
  2. Przejdź do „ Uruchamianie(Startup) ”.
  3. Wyłącz programy startowe,(Disable the startup programs) których domyślnie nie musisz uruchamiać.

6] Defragmentuj dysk twardy

Defragmentacja dysku

Chociaż system Windows 10(Windows 10) robi to automatycznie, może być konieczne od czasu do czasu wykonanie defragmentacji dysków twardych, aby zoptymalizować wydajność:

  1. Przejdź do „ Ten komputer(This PC) ” lub „ Mój komputer(My Computer) ”.
  2. Kliknij prawym(Right-Click) przyciskiem systemowy dysk twardy (zwykle dysk C:).
  3. Przejdź do ' Narzędzia(Tools) ' w ' Właściwości(Properties) ' i wybierz ' Optymalizuj(Optimize) '.
  4. Wybierz dysk do defragmentacji i wybierz ' Analizuj(Analyze) '.

Uruchom ponownie komputer po nowej fragmentacji.

7] Wyczyść plik strony przy wyłączaniu

Teraz to się komplikuje – ale nie martw się. Oto jak wyczyścić plik strony przy każdym wyłączeniu(clear the Page File at every shutdown) :

  • Wpisz regedit w wyszukiwarce(Search) , aby uruchomić Edytor rejestru(Registry Editor) .
  • Wpisz tę ścieżkę:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerMemory Management
  • Zmień wartość ClearPageFileAtShutDown na „1”.( ClearPageFileAtShutDown to ‘1’.)
  • Zapisz zmiany i uruchom ponownie(Restart) urządzenie.

To powinno wystarczyć. Pamiętaj, że proces zamykania zajmie trochę więcej czasu.

9] Wyłącz Superfetch

Ta usługa systemu Windows(Windows Service) optymalizuje wydajność, minimalizując czas rozruchu. Pozwala systemowi Windows zarządzać wykorzystaniem pamięci RAM(RAM) . Życie(Life) po wyłączeniu Superfetch nie jest wygodne, ale zrób to, jeśli musisz. Przynajmniej spróbuj tego samodzielnie, aby wyizolować problem:

  1. Wyszukaj services.msc i przejdź do Menedżera usług.
  2. Poszukaj ' Superfetch ' i kliknij go prawym przyciskiem myszy, aby przejść do ' Właściwości(Properties) '.
  3. Wybierz ' Zatrzymaj(Stop) '.
  4. Również „ Wyłącz(Disable) ” usługę z menu rozwijanego.
  5. Uruchom ponownie komputer i sprawdź, czy wydajność uległa poprawie.

Włącz Superfetch, jeśli to nie zadziałało.

10] Sprawdź, czy nie ma złośliwego oprogramowania

Użyj oprogramowania antywirusowego innej firmy lub wewnętrznego programu Windows Defender(Windows Defender) , aby przeskanować i wyeliminować złośliwe oprogramowanie. Upewnij(Make) się, że program antywirusowy jest zaktualizowany do obsługi Twojego systemu operacyjnego, aby nie stał się przyczyną wycieku pamięci.

Każde rozwiązanie, którego możesz potrzebować, aby znaleźć lub zapobiec wyciekom pamięci, jest właśnie tutaj. Więcej informacji na temat przecieków pamięci można znaleźć w witrynach MSDN i Microsoft .



About the author

Jestem inżynierem oprogramowania z ponad 10-letnim doświadczeniem na platformach Windows 11 i 10. Skupiam się na tworzeniu i utrzymywaniu wysokiej jakości oprogramowania zarówno dla Windows 7, jak i Windows 8. Pracowałem również nad wieloma innymi projektami, w tym między innymi Chrome, Firefox, Xbox One i plikami.



Related posts