Communitygithub.com

tzwkb/memory-cleanup

Windows 메모리 정리 및 Non-Paged Pool 누수 수정을 위한 AI 에이전트 스킬입니다.

memory-cleanup란 무엇인가요?

이 스킬은 Windows 시스템에서 메모리 부족 문제를 진단하고 해결하는 전문 도구입니다. 메모리 사용량, Non-Paged Pool 크기, NDU 상태, WSL VM 메모리 등 포괄적인 메모리 프로필을 스캔하고, 블로트웨어 서비스, 계획된 작업, 실행 키를 식별하여 정리합니다. 특히 Windows Network Data Usage (NDU) 드라이버와 MediaTek MT7921 Wi-Fi 드라이버로 인한 Non-Paged Pool 누수를 감지하고 수정합니다. Claude Code, Cursor, Codex와 같은 AI 에이전트 플랫폼에서 작동하며, 각 수정 후 항상 복원 스크립트(Desktop/memory_restore.ps1)를 업데이트하여 복원성을 보장합니다. 안전 등급 시스템(🟢 안전, 🟡 영향 있음, 🔴 금지)을 통해 사용자 워크로드 손상을 방지하고, 재부팅 후 최종 결과를 확인하는 표준 워크플로우(스캔 → 분석 → 제시 → 실행 → 검증)를 따릅니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add tzwkb/memory-cleanup

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

Memory Cleanup Master — Windows 메모리 정리 마스터

핵심 원칙

  1. 적극적 스캔, 보수적 비활성화
    • 스캔: 프로세스, 서비스, 계획된 작업, 실행 키, 비페이지 풀을 모두 수집
    • 비활성화: 알려진 블로트웨어 및 무위험 항목만 비활성화, 사용자 작업 프로세스는 건드리지 않음
  2. 수정 후 항상 복원 스크립트를 즉시 업데이트
    • 복원 스크립트 고정 경로: $env:USERPROFILE\Desktop\memory_restore.ps1
    • 비활성화/수정 작업 실행 후, 복원 스크립트를 동기화하여 모든 기록 변경 사항을 포함
    • 복원 스크립트 적용 범위: 서비스(NDU 포함), 계획된 작업, 실행 키, 레지스트리(메모리 압축, 페이지 파일)
    • 여러 개의 복원 파일(예: restore_services.ps1)을 만들지 않고, 모두 memory_restore.ps1에 병합
  3. 재부팅 전에 최종 결과를 보고하지 않음
    • 비활성화 작업은 재부팅이 필요하며, 재부팅 전에는 현재 상태만 표시

안전 등급

수준의미예시
🟢 안전알려진 불필요 항목, 비활성화해도 기능에 영향 없음ASUS bloat, DiagTrack, DoSvc, PnkBstrA, NDU 수정
🟡 영향 있음비활성화 시 기능 손실, 그러나 기능이 필요하지 않을 수 있음WSearch (검색 느려짐), SysMain (SSD 영향 없음), Windows Hello
🔴 금지사용자가 사용 중이거나 시스템 핵심Claude, WSL, 사용자가 연 Python 스크립트, RpcSs, DcomLaunch

표준 작업 흐름

Step 1: 스캔

powershell -NoProfile -ExecutionPolicy Bypass -File .claude/skills/memory-cleanup-master/scripts/scan_memory.ps1

출력 항목:

  • 총 메모리 / 사용 가능 메모리 / 사용률
  • 비페이지 풀 크기 및 누수 경고 (>500MB)
  • NDU 상태
  • WSL VM 메모리
  • 상위 25개 프로세스 (프라이빗 메모리 기준 정렬)
  • 알려진 블로트웨어 서비스 목록
  • 분류되지 않은 비 MS 자동 시작 서비스
  • 실행 키
  • 비 MS 계획된 작업

Step 2: 분석

references/known_bloat.md를 참조하여 분류:

  • 알려진 패턴 일치 → 🟢 또는 🟡
  • 분류되지 않은 서비스 → DisplayName 및 PathName 확인, 안전 여부 판단
  • 사용자 작업 프로세스 → 🔴 제외

비페이지 풀 > 500 MB → 우선 수정:

  1. NDU 상태 확인
  2. NDU가 이미 비활성화되었지만 누수가 지속되는 경우 → Wi-Fi/네트워크 카드 드라이버 확인 (MediaTek MT7921, Killer 알려진 누수)

Step 3: 사용자에게 제시

테이블로 표시:

  • 메모리 사용량이 큰 프로세스 (메모리를 많이 사용하는 것들)
  • 비페이지 풀 상태
  • 비활성화 가능한 서비스 (🟢🟡 등급별)
  • 비활성화 가능한 계획된 작업
  • 삭제 가능한 실행 키

사용자가 어떤 항목을 처리할지 결정하도록 합니다. "전체 비활성화" 일괄 명령은 🟢 항목을 모두 실행하고, 🟡 항목은 하나씩 확인합니다.

Step 4: 정리 실행

# 특정 서비스 비활성화
powershell -NoProfile -ExecutionPolicy Bypass -File .claude/skills/memory-cleanup-master/scripts/cleanup_memory.ps1 -Services 'ASUS','NVIDIA','QQ' ...

# NDU 비활성화
powershell -NoProfile -ExecutionPolicy Bypass -File .claude/skills/memory-cleanup-master/scripts/cleanup_memory.ps1 -DisableNdu

# 미리보기 모드
powershell -NoProfile -ExecutionPolicy Bypass -File .claude/skills/memory-cleanup-master/scripts/cleanup_memory.ps1 -DryRun -Services 'ASUS'

cleanup_memory.ps1 매개변수:

  • -Services — 서비스 이름 목록, 별칭 지원 (ASUS/NVIDIA/QQ/WPS/Logitech/Other 일괄 확장)
  • -Tasks — 계획된 작업 이름 목록
  • -RunKeyNames — 실행 키 이름 목록
  • -DisableNdu — NDU 누수 수정
  • -DryRun — 미리보기 모드
  • -RestoreScriptPath — 복원 스크립트 경로

Step 5: 검증

  • 재부팅 후 다시 스캔, 비활성화 전후 비교
  • 비페이지 풀이 500MB 미만으로 떨어졌는지 확인
  • 대기 메모리가 감소했는지 확인

재부팅 후 재확인 목록

일부 서비스는 재부팅 후 Auto 상태로 복원될 수 있으므로 다시 스캔하여 확인:

항목확인 방법
RadeonSoftware.exe프로세스 목록에 나타나지 않아야 함
DoSvcWindows가 Auto로 복원하는 경우가 많음
AMD External Events Utility드라이버 설치로 다시 활성화될 수 있음
Widgets관련 프로세스가 없어야 함
msedgewebview2 확산인스턴스가 3개를 초과하지 않아야 함
계획된 작업새로운 Ready 작업이 없어야 함
비페이지 풀NDU 비활성화 + MT7921 새 드라이버 → < 500MB여야 함

NDU 누수 수정 (빈번한 문제)

Windows Network Data Usage 드라이버 Ndu.sys는 비페이지 풀 누수의 주요 원인입니다.

증상: 비페이지 풀 1-3+ GB, 작업 관리자에서 특정 프로세스에 귀속되지 않으며, 부팅 직후부터 증가하기 시작합니다.

수정:

reg add "HKLM\SYSTEM\CurrentControlSet\Services\Ndu" /v Start /t REG_DWORD /d 4 /f

재부팅 후 적용됩니다. 영향: 설정의 네트워크 트래픽 통계가 비어지지만, 네트워크 기능에는 영향이 없습니다.

MT7921 Wi-Fi 드라이버 누수 (ASUS TUF/ROG 노트북에서 빈번)

MediaTek MT7921 구형 드라이버는 지속적으로 비페이지 풀을 누수시킵니다. NDU 비활성화 후에도 >500MB인 경우 우선 확인합니다.

확인:

Get-NetAdapter | Where-Object { $_.InterfaceDescription -match 'MT7921' }

현재 버전이 < 25.x이면 업데이트가 필요합니다.

수정 절차:

  1. Microsoft Update Catalog를 엽니다.
  2. 마지막 업데이트 날짜 기준으로 정렬하고 최신 .cab 파일을 다운로드합니다.
  3. 압축을 풀어 설치합니다:
C:\Windows\System32\expand.exe <cab 파일> -F:* C:\MT7921_Driver
pnputil /add-driver C:\MT7921_Driver\mtkwl6ex.inf /install
  1. 재부팅 후 적용됩니다. 참고: CAB 압축 해제 시 전체 경로 C:\Windows\System32\expand.exe를 사용해야 합니다. 그렇지 않으면 bash의 expand 명령과 충돌할 수 있습니다.

AMD 그래픽 드라이버 순수화 (Adrenalin 제거)

RadeonSoftware (~250MB)는 AMD 커널 드라이버에 의해 직접 실행되므로 서비스 비활성화가 소용없습니다. 근본적인 해결 방법:

  1. AMD 공식 사이트에서 최신 Adrenalin 드라이버 .exe를 다운로드합니다.
  2. 설치 프로그램을 한 번 실행하여 C:\AMD\에 압축을 풀게 합니다 (설치 마법사가 나타나면 닫습니다).
  3. C:\AMD\...\Packages\Drivers\Display\WT6A_INF\*.inf를 찾습니다.
  4. 순수 드라이버를 주입합니다:
pnputil /add-driver C:\AMD\AMD-Software-Installer\Packages\Drivers\Display\WT6A_INF\u*.inf /install
  1. 재부팅 후 RadeonSoftware가 더 이상 실행되지 않습니다. 제어판이 필요하면 전체 Adrenalin을 다시 설치하면 됩니다.

복원 스크립트 적용 범위

Desktop/memory_restore.ps1은 모든 수정 유형을 포함해야 합니다:

수정 유형복원 방법
서비스 비활성화 (Set-Service)Set-Service -StartupType Automatic
NDU 비활성화 (레지스트리)reg add ... Ndu ... /d 2
메모리 압축 활성화 (레지스트리)Set-ItemProperty ... EnableCompression -Value 0
페이지 파일 마이그레이션 (CIM)Remove-CimInstance C: + Set-CimInstance E:
계획된 작업 비활성화Enable-ScheduledTask -TaskName (전체 경로 포함)
실행 키 삭제Set-ItemProperty로 원래 값 복원

스크립트 목록

스크립트용도
scripts/scan_memory.ps1전체 스캔, 메모리 전체 현황 보고서 출력
scripts/cleanup_memory.ps1서비스/작업/실행 키 정리 실행, 복원 스크립트 자동 생성
scripts/kill_bloat.ps1알려진 블로트웨어 프로세스 종료
scripts/kill_search.ps1SearchHost / StartMenu / TextInputHost 등 비활성 프로세스 종료
scripts/audit_full.ps1심층 감사: 메모리 압축, 페이지 파일, 비 MS 서비스, 시작 항목, 프로세스 트리
scripts/squeeze.ps1남은 최적화 대상 스캔 (프로세스 >20MB, webview 부모 프로세스, ASUS 부활 감지)
scripts/squeeze_kill.ps1webview 체인 + Widgets + PhoneExperienceHost 일괄 종료 + FontCache/CDP/투명도 변경
scripts/permanent_disable.ps1Widgets 그룹 정책 영구 비활성화 + Phone Link 제거 + explorer 재시작
scripts/find_respawns.ps1프로세스 부활 원인 진단 (실행 키 / 작업 / 서비스)
scripts/check_gpu.ps1GPU 모델 및 드라이버 버전 조회
scripts/download_amd.ps1AMD 드라이버 다운로드 (CDN에 차단될 수 있음)
scripts/install_amd_driver_only.ps1AMD 드라이버 패키지 추출, pnputil로 순수 드라이버 주입 (Adrenalin 없음)
scripts/update_driver.ps1MT7921 Wi-Fi 드라이버 상태 확인
references/known_bloat.md알려진 블로트웨어 패턴 + 부활 메커니즘 설명 + 최적화 기술 참고
Desktop/memory_restore.ps1유일한 복원 스크립트, 각 수정 후 동기화하여 업데이트

출력 템플릿

스캔 보고서

========== Memory Scan Report ==========
Total RAM: 15.2 GB | Available: 2.1 GB | Usage: 86%
Non-Paged Pool: 1680 MB *** WARNING: >500MB ***
NDU: auto  *** FIX REQUIRED ***
WSL VM Memory: 4100 MB

--- Top 10 Processes ---
(전체 목록)

--- Known Bloatware (X services) ---
| Service | Category | Risk |
(전체 목록)

--- Run Keys (Y entries) ---
(전체 목록)
========== End Report ==========

정리 제안 테이블

카테고리항목위험설명
......🟢/🟡...

정리 후 요약

작업수량
서비스 비활성화N
작업 비활성화N
실행 키 삭제N
레지스트리 수정N
예상 확보 공간~X GB
복원 스크립트Desktop/memory_restore.ps1

프로세스 부활 메커니즘과 근본적인 해결 방법

이 섹션은 지금까지 발견된 지속적인 프로세스와 그 부활 원리를 기록합니다.

프로세스부활 메커니즘근본적인 해결 방법
RadeonSoftware (~250MB)AMD 그래픽 커널 드라이버(amdwddmg.sys)가 사용자 모드 제어판을 직접 실행합니다. AMD External Events Utility 서비스를 비활성화해도 소용없습니다. 드라이버 계층이 서비스 상태를 무시합니다.AMD 드라이버 설치 시 Driver Only 선택 (pnputil로 순수 드라이버 INF 주입), Adrenalin 제어판을 설치하지 않음
asus_framework (~90MB ×4)ArmourySocketServer.exe가 부모 프로세스 수호자 역할을 합니다. asus_framework는 Electron 애플리케이션으로, ArmourySocketServer가 이를 모니터링하고 부활시킵니다.ArmourySocketServer를 먼저 종료한 후 asus_framework를 종료합니다. \ASUS\ArmourySocketServer 계획된 작업을 비활성화합니다.
msedgewebview2 (최대 500MB+)Widgets / SearchHost가 각각 하나의 부모 webview를 실행하고, 부모 webview가 다시 여러 자식 webview를 체인 방식으로 실행합니다.Widgets 비활성화 (그룹 정책 HKLM\SOFTWARE\Policies\Microsoft\Dsh). SearchHost는 해결책 없음(작업 표시줄 검색).
Widgets (~17MB + webview 체인)Windows Shell 경험 호스트가 사용자 상호 작용에 따라 실행을 트리거합니다.그룹 정책 레지스트리 AllowNewsAndInterests=0, 영구 비활성화
PhoneExperienceHost (~48MB)사전 설치된 Phone Link 앱, 사용자 로그인 시 자동으로 백그라운드에서 실행됩니다.AppxPackage 제거: Remove-AppxPackage *YourPhone*
SearchHost (~47MB)작업 표시줄 검색 상자, 사용자가 작업 표시줄과 상호 작용할 때마다 재시작됩니다.근본적인 해결 불가. 종료해도 검색 상자를 클릭하면 즉시 부활.
StartMenuExperienceHost (~67MB)시작 메뉴, 클릭하면 재시작됩니다.위와 동일
TextInputHost (~28MB)텍스트 입력/터치 키보드, 텍스트 필드에 포커스가 이동하면 재시작됩니다.위와 동일

PowerShell 호출 규칙

$_ / $_. / $(가 포함된 코드를 -Command로 전달하는 것은 엄격히 금지됩니다. bash가 이러한 변수를 소비합니다.

# ❌ 오류: bash가 $_를 자신의 특수 변수로 해석함
powershell -Command "Get-Process | Where-Object { $_.Name -match 'foo' }"

# ✅ 올바름: 스크립트 파일, PowerShell이 직접 해석
powershell -File script.ps1

로직이 간단한 경우 -Command를 사용할 수 있지만 $_와 {} 내의 $는 피해야 합니다. 복잡한 필터링이 필요한 경우 항상 .ps1 스크립트 파일로 작성한 후 -File로 실행합니다.

CDN 다운로드 제한

AMD (Akamai) 및 ASUS (Alibaba Cloud CDN)의 드라이버 다운로드 링크는 터미널에서 직접 다운로드하면 403/차단됩니다:

출처CDNcurlwgetIWRBITS
AMD drivers.amd.comAkamai❌ 403❌ 403❌ 403❌ 403
ASUS dlcdnets.asus.comAlibaba Cloud❌❌❌미테스트

유일하게 신뢰할 수 있는 방법: Start-Process <url>로 브라우저를 열어 사용자가 수동으로 다운로드 버튼을 클릭하게 합니다. 다운로드가 완료되면 스크립트가 후속 작업을 처리합니다.

최적화 강력한 방법 (우선순위 높음에서 낮음)

우선순위작업예상 이점위험
🔴 최고메모리 압축 활성화2-3 GB 추가 확보 효과없음 (Windows 10/11 기본적으로 켜져 있어야 함)
🔴 최고NDU 비활성화비페이지 풀 누수 주요 원인 수정매우 낮음 (네트워크 트래픽 통계가 비어짐)
🟡 높음RadeonSoftware 종료~250 MB제어판이 없으면 독점 그래픽 전환 등을 조정할 수 없음
🟡 높음페이지 파일 HDD→SSDIO 성능 향상없음 (순수 이점)
🟢 중간msedgewebview2 정리100-500 MB관련 앱의 웹 인터페이스가 작동하지 않음
🟢 중간Widgets 비활성화~20 MB + webview 체인뉴스 카드가 보이지 않음
🟢 중간Phone Link 제거~50 MBPC에서 전화를 받을 수 없음
🔵 낮음계획된 작업/서비스 비활성화50-200 MB각 구성 요소 업데이트/기능 손실

관련 스킬