Windows 11/10에서 메모리 누수 찾기 및 수정
메모리 누수(Memory Leak) 는 잘못된 메모리 할당으로 인해 컴퓨터 프로그램에서 리소스가 잘못 배치되는 것입니다 . 사용하지 않는 RAM 위치가 해제되지 않은 상태로 남아 있을 때 발생합니다 . 메모리 누수는 필요 이상으로 많은 RAM(RAM) 을 사용하는 프로그램을 나타내는 공간 누수와 혼동되어서는 안 됩니다 . Windows 11/10/8/7 시스템 에서 메모리 누수는 사용 중이 아닌데도 메모리에 액세스할 수 없을 때 발생했다고 합니다.
Windows 11/10의 메모리 누수
시작하기 전에 메모리(Memory) 누수가 디버깅해야 하는 소프트웨어 문제 라는 것을 알아야 합니다 (예: Java , JavaScript , C/C++, Windows 등). 물리적으로 (Windows)RAM 이나 하드 디스크를 교체할 필요는 없습니다.
왜 나쁜거야
메모리 누수는 시스템의 결함인 버그이기 때문에 나쁜 것이 분명합니다. 그러나 이것이 시스템에 정확히 어떤 영향을 미치는지 알아봅시다.
- 메모리는 사용하지 않을 때도 해제되지 않기 때문에 메모리가 고갈됩니다.
- 메모리가 고갈되면 소프트웨어가 노화됩니다.
- 사용 가능한 메모리가 감소하면 응답 시간이 늘어나고 시스템 성능이 저하됩니다.
- 확인되지 않은 메모리 누수는 결국 응용 프로그램의 충돌로 이어질 수 있습니다.
메모리 누수를 식별하기 위해 프로그래머는 프로그램의 소스 코드에 액세스할 수 있어야 합니다.
누출 위치 찾기
문제를 해결하려면 먼저 문제를 식별해야 합니다. 메모리 누수를 찾는 기본 단계는 다음과 같습니다.
- 확인(Affirmation) : 누출이 발생했는지 확인합니다.
- 커널 모드 메모리 누수(Finding Kernel-mode memory leak) 찾기 : 커널 모드 드라이버 구성 요소로 인한 누수 찾기.
- 사용자 모드 메모리 누수(Finding User-mode memory leak) 찾기 : 사용자 모드 드라이버 또는 앱으로 인한 누수 찾기.
메모리 할당
응용 프로그램이 RAM(RAM) 을 할당하는 다양한 모드가 있습니다 . 사용 후 공간이 확보되지 않으면 할당 모드에 관계없이 메모리 누수가 발생합니다. 몇 가지 일반적인 할당 패턴은 다음과 같습니다.
- (HealAlloc)힙 메모리 할당을 위한 HealAlloc 함수. C/C++ 런타임에 해당하는 것은 malloc 및 new입니다.
- (VirtualAlloc)OS에서 직접 할당을 위한 VirtualAlloc 기능.
- (Kernel32 APIs)앱의 커널 메모리를 보관하는 Kernel32 API . 예(Example) , CreateFile , CreateThread .
- User32 API 및 Gdi32 API.
Windows에서 메모리 누수 방지
우리는 모두 예방이 치료보다 낫다는 것을 알고 있으므로 메모리 누수를 방지하는 몇 가지 방법이 있습니다.
모니터링 습관
개별 프로그램 및 응용 프로그램 의 비정상적인 RAM 사용에 주의해야 합니다. (RAM)CTRL+SHIFT+ESC 를 눌러 Windows 작업 관리자(Windows Task Manager) 로 이동하고 Handles , User Objects , GDI Objects 등과 같은 열을 추가할 수 있습니다 .
이렇게 하면 리소스 사용량을 쉽게 모니터링하는 데 도움이 됩니다.
읽기(Read) : 컴퓨터의 메모리 유형은 무엇입니까?(What are the Types of Memory in a computer?)
(Microsoft)메모리 누수 진단을 위한 Microsoft 도구
다양한 도구는 다양한 할당 모드에 대한 메모리 누수를 진단합니다.
- Application Verifier 는 힙 누수를 진단합니다.
- UMDH ( Windows 디버깅 도구(Windows Debugging Tools) 의 구성 요소 )는 힙 메모리 할당을 모니터링하여 개별 프로세스의 누수를 진단합니다.
- RAM 사용량 에 대한 철저한 분석을 위한 추적 캡처 .(Capture)
- Xperf도 힙 할당 패턴을 추적합니다.
- CRT 디버그 힙(CRT Debug Heap) 은 힙 할당을 추적할 뿐만 아니라 코딩 방식을 통해 누수를 최소화할 수 있습니다.
- JavaScript 메모리 누수 감지기(JavaScript Memory Leak Detector) 는 코드의 메모리 누수를 디버그합니다.
사용 팁
- 커널 HANDLE 및 (HANDLE)Win32 리소스 및 힙 할당 에 대한 기타 스마트 포인터를 사용합니다.
- (Get)ATL 라이브러리 에서 커널 할당을 위한 자동 리소스 관리를 위한 클래스를 가져 옵니다 . C++ 표준에는 힙 할당을 위한 auto_ptr 이 있습니다.(auto_ptr )
- (Encapsulate COM)_com_ptr_t 또는 _bstr_t 또는 _variant_t 를 사용하여 "스마트 포인터" 내에서 COM 인터페이스 포인터를 캡슐화 합니다.
- (Monitor)비정상적인 메모리 사용에 대해 .NET 코드를 (.NET)모니터링 합니다 .
- (Avoid)함수가 끝날 때까지 대부분의 블록에서 변수에서 할당을 해제할 수 있도록 함수에 대한 다중 종료 경로를 피하십시오 .
- (Use)_finally 블록 에서 모든 할당을 해제한 후에만 기본 예외를 사용하십시오 . C++ 예외를 사용하려면 모든 힙을 래핑(Wrap) 하고 할당을 스마트 포인터로 처리합니다.
- PROPVARIANT 개체 를 다시 초기화하거나 버리기 전에 항상 PropVariantClear 함수를 호출하십시오 .
(Troubleshoot)Windows 에서 메모리 누수 문제 해결
메모리 누수를 방지하는 다양한 방법과 마찬가지로 메모리 누수를 막는 다양한 방법이 있습니다. 그러나 시작하기 전에 먼저 시스템 복원 지점을 만들어야 합니다 .
1] 프로세스를 닫고 다시 시작하십시오.
If you see an unnecessary process is taking up too much RAM, you can end the process in the Task Manager. You will need to restart the device so that the freed space is available for use by other processes. Without a Restart memory leak issue won’t be solved. One particular process that has bugs to slow down the PC is Runtime Broker. Try if disabling that alone works.
2] Memory Diagnostic Tools
To access the inbuilt Memory Diagnostic Tool for Windows:
- Save all your important work.
- Press Win + R to open the Run window.
- Type the command mdsched.exe in the Run window.
- Restart the PC.
- 다시 시작한 후 기본 스캔을 수행하거나 ' 테스트 믹스(Test mix) ' 또는 ' 통과 횟수 '와 같은 ' (Pass count)고급(Advanced) ' 옵션 으로 이동하십시오 .
- F10 키(F10) 를 눌러 테스트를 시작합니다.
아직 임시 수정 사항입니다.
3] 드라이버 업데이트 확인
오래된 드라이버는 메모리 누수를 일으킵니다. 모든 드라이버를 최신 상태로 유지 :
- Win + R 을 누르고 실행(Run) 창 을 엽니다 . devmgmt.msc 를 입력 하고 Enter 키(Enter) 를 누릅니다 . 장치 관리자(Device Manager) 로 이동합니다 .
- (Check)오래된 드라이버를 확인 하고 모두 업데이트하십시오.
- 업데이트를 놓쳤을 수 있으므로 Windows 업데이트(Windows Update) 를 확인하십시오 .
이것은 간단했습니다.
4] 성능 최적화
성능을 위해 Windows를 조정 하면 프로세서 일정 및 메모리 사용을 포함한 모든 것을 관리하여 메모리 누수를 방지합니다. 이 단계를 따르세요:
- ' 내 PC(This PC) ' 를 마우스 오른쪽 버튼으로 클릭 하고 왼쪽 창에서 ' 고급 ' 설정을 선택합니다.(Advanced)
- ' 고급(Advanced) ' 탭에서 ' 성능(Performance) '으로 이동한 다음 ' 설정(Settings) '으로 이동합니다.
- ' 최적 성능으로 조정(Adjust for best performance) '을 선택하고 확인을 클릭합니다(OK) .
- 다시 시작(Restart) 하고 문제가 해결되었는지 확인하십시오.
이 간단한 해결 방법이 작동하지 않으면 다음 해결 방법을 시도해 보십시오.
5] 시작(Startup) 시 실행 중인 프로그램(Programs) 비활성화
번거로운 프로그램을 비활성화하는 것이 메모리 누수 문제를 제거하는 유일한 방법입니다. 작업 관리자(Task Manager) 로 이동 하여 문제 해결 프로그램을 비활성화하십시오. 어떤 프로그램이 문제를 일으키는지 모르는 경우 다음과 같이 하십시오.
- ' 작업 관리자(Task Manager) '로 이동합니다.
- ' 시작(Startup) '으로 이동합니다.
- (Disable the startup programs)기본적으로 실행할 필요가 없는 시작 프로그램을 비활성화합니다 .
6] 하드 드라이브 조각 모음
Windows 10 이 이 작업을 자동으로 수행 하지만 성능을 최적화하기 위해 때때로 하드 드라이브 조각 모음 을 수행해야 할 수 있습니다 .
- ' 이 PC(This PC) ' 또는 ' 내 컴퓨터(My Computer) '로 이동합니다.
- (Right-Click)시스템 하드 드라이브(보통 C: 드라이브)를 마우스 오른쪽 버튼으로 클릭 합니다.
- ' 속성(Properties) ' 아래의 ' 도구(Tools) '로 이동하여 ' 최적화(Optimize) ' 를 선택 합니다.
- 조각 모음할 드라이브를 선택하고 ' 분석(Analyze) '을 선택합니다.
새로운 조각화 후에 컴퓨터를 다시 시작하십시오.
7] 종료 시 ClearPage 파일
지금은 복잡해지고 있지만 걱정하지 마십시오. 종료할 때마다 페이지 파일(clear the Page File at every shutdown) 을 지우는 방법은 다음과 같습니다 .
- 검색 에 (Search)regedit 를 입력 하여 레지스트리 편집기(Registry Editor) 를 시작합니다 .
- 다음 경로를 입력하십시오.
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerMemory Management
- ClearPageFileAtShutDown 의 값 을 '1'로 변경합니다.( ClearPageFileAtShutDown to ‘1’.)
- 변경 사항을 저장하고 장치를 다시 시작(Restart) 합니다.
이것은 그것을해야합니다. 종료 프로세스에 시간이 조금 더 걸린다는 점을 기억하십시오.
9] 슈퍼페치 비활성화
이 Windows 서비스(Windows Service) 는 부팅 시간을 최소화하여 성능을 최적화합니다. Windows 에서 (Windows)RAM 사용량을 관리할 수 있습니다. Superfetch 를 비활성화한 후의 삶은(Life) 편리하지 않지만 필요한 경우 수행합니다. 문제를 분리하기 위해 적어도 이것을 단독으로 시도하십시오.
- services.msc 를 검색 하고 서비스 관리자로 이동합니다.
- ' Superfetch '를 찾아 마우스 오른쪽 버튼으로 클릭하여 ' 속성(Properties) '으로 이동합니다.
- ' 중지(Stop) '를 선택합니다.
- 또한 드롭다운 메뉴에서 서비스를 ' 비활성화 '합니다.(Disable)
- PC를 다시 시작하고 성능이 향상되었는지 확인합니다.
이것이 작동하지 않으면 Superfetch를 활성화하십시오.
10] 악성코드 확인
타사 바이러스 백신 소프트웨어 또는 Windows 10의 사내 Windows Defender 를 사용하여 맬웨어를 검사하고 제거합니다. 메모리 누수의 원인이 되지 않도록 바이러스 백신이 OS를 지원하도록 업데이트되었는지 확인 하십시오.(Make)
메모리 누수를 찾거나 방지하는 데 필요한 모든 솔루션이 바로 여기에 있습니다. MSDN 및 Microsoft 에서 메모리 누수에 대해 자세히 읽을 수 있습니다 .
Related posts
Windows 10에서 Small Memory Dump (DMP) 파일을 열고 읽는 방법
Windows 11/10에서 Windows Memory Diagnostics Tool을 실행하는 방법
Windows 10에서 Page File size 또는 가상 메모리를 늘리는 방법
Windows 10에서 Crash Dump file를 수동으로 생성하는 방법
Explorer.exe High Memory or CPU usage Windows 10
Windows 10 동기화 설정이 작동하지 않습니다
Windows 10에서 Disk Signature Collision problem을 수정하는 방법
Microsoft Intune 동기화가 아니요? Force Intune Windows 11/10에서 동기화합니다
Windows 10에서 Memory Cache을 지우는 방법
Find Windows 10 설정에서 Device option을 비활성화하는 방법
Windows 11/10에서 전용 Video RAM을 늘리는 방법
HDMI playback Windows 10에 표시되지 않는 장치
Fix Microsoft Edge High Memory Usage in Windows 10
File Explorer에서 Details pane를 보여주는 방법 Windows 10에서
Fix Chrome 높은 CPU, Memory or Disk usage Windows 10에서
Set Notepad++ Windows 11/10의 .xml 파일의 default editor
어떻게 Windows 10에서 종료에 Move, 또는 Delete PageFile.sys를 백업하려면
CPU은 Windows 11/10에서 전체 speed or capacity에서 실행되지 않습니다
Windows 10에서 하드 디스크 드라이브를 Hot Swap으로 바꾸는 방법
Windows 11/10에서 Processor Cache Memory Size을 확인하는 방법