Windows 10에서 메모리 누수 찾기 및 수정

메모리 누출 로 인해 결함이있는 메모리에 할당하는 컴퓨터 프로그램에 자원의 오정렬된다. 사용하지 않는 RAM 위치가 릴리스되지 않은 상태로있을 때 발생합니다. 메모리 누수를 필요 이상으로 많은 RAM을 사용하는 프로그램을 나타내는 공간 누수와 혼동해서는 안됩니다. Windows 10/8/7 시스템에서 메모리 누수는 사용하지 않는데도 메모리에 액세스 할 수 없을 때 발생했다고합니다.

Windows 10의 메모리 누수

시작하기 전에 메모리 누수가 디버깅 할 소프트웨어 문제라는 것을 알아야합니다. 예를 들어 Java, JavaScript, C / C ++, Windows 등에서. RAM이나 하드 디스크를 물리적으로 교체 할 필요가 없습니다.

Windows 10의 메모리 누수

왜 나쁜가요

시스템의 결함 인 버그이기 때문에 메모리 누수가 나쁘다는 것은 명백합니다. 그러나 그것이 시스템에 정확히 어떻게 영향을 미치는지 알아 봅시다 :

  1. 사용하지 않을 때에도 메모리가 해제되지 않으므로 메모리가 고갈됩니다.
  2. 메모리가 고갈되면 소프트웨어가 노화됩니다.
  3. 사용 가능한 메모리가 감소하면 응답 시간이 증가하고 시스템 성능이 저하됩니다.
  4. 확인되지 않은 메모리 누수는 결국 응용 프로그램의 충돌로 이어질 수 있습니다.

메모리 누수를 확인하려면 프로그래머가 프로그램의 소스 코드에 액세스 할 수 있어야합니다.

누수 찾기

문제를 해결하려면 먼저 문제를 식별해야합니다. 메모리 누수를 찾는 기본 단계는 다음과 같습니다.

  1. 긍정 : 누출이 발생했는지를 결정.
  2. 커널 모드 메모리 누수 찾기 : 커널 모드 드라이버 구성 요소로 인한 누수 찾기.
  3. 사용자 모드 메모리 누수 찾기 : 사용자 모드 드라이버 또는 앱으로 인한 누수를 찾습니다.

메모리 할당

응용 프로그램이 RAM을 할당하는 여러 모드가 있습니다. 사용 후 공간이 확보되지 않으면 할당 모드에 관계없이 메모리 누수가 발생합니다. 몇 가지 일반적인 할당 패턴은 다음과 같습니다.

  1. 힙 메모리 할당을위한 HealAlloc 함수. C / C ++ 런타임에 해당하는 것은 malloc 및 new입니다.
  2. OS에서 직접 할당을위한 VirtualAlloc 기능.
  3. 앱의 커널 메모리를 보유하는 Kernel32 API입니다. 예 : CreateFile, CreateThread.
  4. User32 API 및 Gdi32 API.

메모리 누수 방지

우리 모두는 예방이 치료보다 낫다는 것을 알고 있으므로 메모리 누수를 방지하는 몇 가지 방법이 있습니다.

습관 모니터링

Windows 10의 메모리 누수

개별 프로그램 및 응용 프로그램에서 비정상적인 RAM 사용량을 주시해야합니다. CTRL + SHIFT + ESC 를 눌러 Windows 작업 관리자로 이동하고 Handles, User Objects, GDI Objects 등과 같은 열을 추가 할 수 있습니다.

이렇게하면 리소스 사용량을 쉽게 모니터링 할 수 있습니다.

메모리 누수 진단을위한 Microsoft 도구

다양한 도구가 다양한 할당 모드에 대한 메모리 누수를 진단합니다.

  1. Application Verifier는 힙 누수를 진단합니다.
  2. UMDH (Windows 디버깅 도구의 구성 요소)는 힙 메모리 할당을 모니터링하여 개별 프로세스의 누수를 진단합니다.
  3. RAM 사용량에 대한 철저한 분석을위한 Trace Capture.
  4. Xperf도 힙 할당 패턴을 추적합니다.
  5. CRT 디버그 힙은 힙 할당을 추적 할뿐만 아니라 코딩 방식을 통해 누수를 최소화 할 수 있습니다.
  6. JavaScript Memory Leak Detector는 코드의 메모리 누수를 디버깅합니다.

사용 팁

  1. Win32 리소스 및 힙 할당을 위해 커널 HANDLE 및 기타 스마트 포인터를 사용합니다.
  2. ATL 라이브러리에서 커널 할당을위한 자동 리소스 관리를위한 클래스를 가져옵니다. C ++ 표준에는 힙 할당을위한 auto_ptr 이 있습니다.
  3. _com_ptr_t 또는 _bstr_t 또는 _variant_t 의 도움으로 "스마트 포인터"내에 COM 인터페이스 포인터를 캡슐화 합니다.
  4. 비정상적인 메모리 사용량에 대해 .NET 코드를 모니터링합니다.
  5. 함수가 끝날 때 대부분의 블록에있는 변수에서 할당을 해제 할 수 있도록 함수에 대한 다중 종료 경로를 피하십시오.
  6. _finally 블록에서 모든 할당을 해제 한 후에 만 ​​기본 예외를 사용하십시오. C ++ 예외를 사용하기 위해 모든 힙 및 핸들 할당을 스마트 포인터로 래핑합니다.
  7. PROPVARIANT 개체를 다시 초기화하거나 삭제하기 전에 항상 PropVariantClear 함수를 호출하십시오 .

Windows에서 메모리 누수 문제 해결

메모리 누수를 방지하는 다양한 방법과 마찬가지로 메모리 누수를 막는 다양한 방법이 있습니다. 그러나 시작하기 전에 먼저 시스템 복원 지점을 만들어야합니다.

1] 프로세스를 닫고 다시 시작하십시오.

불필요한 프로세스가 너무 많은 RAM을 차지하고있는 경우 작업 관리자에서 프로세스를 종료 할 수 있습니다. 여유 공간을 다른 프로세스에서 사용할 수 있도록 장치를 다시 시작해야합니다. 다시 시작하지 않으면 메모리 누수 문제가 해결되지 않습니다. PC 속도를 늦추는 버그가있는 특정 프로세스 중 하나는 런타임 브로커입니다. 그것만으로 작동하는지 시도하십시오.

2] 메모리 진단 도구

Windows 메모리 진단

Windows 용 내장 메모리 진단 도구에 액세스하려면 :

  1. 모든 중요한 작업을 저장하십시오.
  2. 보도 승 + R은 오픈하는 실행 창을여십시오.
  3. 명령 입력 mdsched.exe 에서 실행 창을여십시오.
  4. PC를 다시 시작하십시오.
  5. 다시 시작한 후 기본 스캔을 수행하거나 ' Test mix '또는 ' Pass count ' 와 같은 ' Advanced '옵션으로 이동합니다 .
  6. 보도 F10는 테스트를 시작합니다.

이는 여전히 임시 수정입니다.

3] 드라이버 업데이트 확인

드라이버 소프트웨어 업데이트

오래된 드라이버로 인해 메모리 누수가 발생합니다. 모든 드라이버를 최신 상태로 유지 :

  1. Win + R을 누르고 실행 창을 엽니 다 . 유형 devmgmt.msc를 입력하고 Enter 키를 누릅니다. 그것은 당신을 데려 갈 것이다 장치 관리자 .
  2. 오래된 드라이버를 확인하고 모두 업데이트하십시오.
  3. 놓친 업데이트는 Windows 업데이트에서 확인하세요.

이것은 간단했습니다.

4] 성능 최적화

최상의 성능을 위해 조정

성능을 위해 Windows를 조정하면 메모리 누수를 막기 위해 프로세서 예약 및 메모리 사용을 포함한 모든 것을 관리합니다. 다음과 같이하세요:

  1. ' 이 PC '를 마우스 오른쪽 버튼으로 클릭 하고 왼쪽 창 에서 ' 고급 '설정을 선택 합니다.
  2. ' 고급 '탭에서 ' 성능 '으로 이동 한 다음 ' 설정 '으로 이동합니다.
  3. ' 최적의 성능으로 조정 '을 선택하고 확인을 클릭 합니다.
  4. 다시 시작하고 문제가 해결되었는지 확인하십시오.

이 간단한 해결책이 작동하지 않으면 다음 해결책을 시도하십시오.

5] 시작시 실행되는 프로그램 비활성화

시작 프로그램

성가신 프로그램을 비활성화하는 것이 메모리 누수 문제를 제거하는 유일한 방법입니다. 작업 관리자로 이동하여 문제 해결 프로그램을 비활성화하십시오. 어떤 프로그램이 문제를 일으키는 지 모르는 경우 다음과 같이하십시오.

  1. ' 작업 관리자 '로 이동합니다 .
  2. ' 시작 '으로 이동합니다 .
  3. 기본적으로 실행할 필요가없는 시작 프로그램을 비활성화합니다.

6] 하드 드라이브 조각 모음

디스크 조각 모음

Windows 10이이 작업을 자동으로 수행하지만 성능을 최적화하려면 때때로 하드 드라이브 조각 모음을 수행해야 할 수 있습니다.

  1. ' 이 PC '또는 ' 내 컴퓨터 '로 이동합니다.
  2. 시스템 하드 드라이브 (일반적으로 C : 드라이브)를 마우스 오른쪽 버튼으로 클릭합니다.
  3. ' 속성 '아래의 ' 도구 '로 이동하여 ' 최적화 '를 선택하십시오 .
  4. 조각 모음 할 드라이브를 선택하고 ' 분석 '을 선택 합니다.

새로운 조각화 후 컴퓨터를 다시 시작하십시오.

7] 종료시 ClearPage 파일

지금은 복잡해 지지만 걱정하지 마십시오. 종료 할 때마다 페이지 파일을 지우는 방법은 다음과 같습니다.

  • 검색에 regedit 를 입력 하여 레지스트리 편집기를 시작합니다.
  • 다음 경로를 입력하십시오.
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession Manager 메모리 관리
  • ClearPageFileAtShutDown 의 값 을 '1'로 변경하십시오 .
  • 변경 사항을 저장하고 장치를 다시 시작하십시오.

이것은 그것을해야합니다. 종료 프로세스에는 시간이 조금 더 걸립니다.

9] Superfetch 비활성화

이 Windows 서비스는 부팅 시간을 최소화하여 성능을 최적화합니다. Windows에서 RAM 사용량을 관리 할 수 ​​있습니다. Superfetch를 비활성화 한 후의 생활은 편리하지 않지만 필요한 경우 수행합니다. 적어도 문제를 분리하기 위해 이것을 단독으로 시도하십시오.

  1. services.msc를 검색 하고 서비스 관리자로 이동합니다.
  2. ' Superfetch '를 찾아 마우스 오른쪽 버튼으로 클릭하여 ' 속성 ' 으로 이동합니다 .
  3. ' 중지 '를 선택하십시오 .
  4. 또한 드롭 다운 메뉴에서 서비스를 ' 비활성화 '합니다.
  5. PC를 다시 시작하고 성능이 향상되었는지 확인하십시오.

이것이 작동하지 않으면 Superfetch를 활성화하십시오.

10] 악성 코드 확인

타사 바이러스 백신 소프트웨어 또는 Windows 10의 사내 Windows Defender를 사용하여 맬웨어를 검사하고 제거합니다. 바이러스 백신이 OS를 지원하도록 업데이트되었는지 확인하여 메모리 누수의 원인이되지 않도록합니다.

메모리 누수를 찾거나 방지하는 데 필요한 모든 솔루션이 바로 여기에 있습니다. MSDN 및 Microsoft에서 메모리 누수에 대한 자세한 내용을 읽을 수 있습니다.

Original text


Windows 10의 메모리 누수