Memory Cleanup Master — Windows 메모리 정리 마스터
핵심 원칙
- 적극적 스캔, 보수적 비활성화
- 스캔: 프로세스, 서비스, 계획된 작업, 실행 키, 비페이지 풀을 모두 수집
- 비활성화: 알려진 블로트웨어 및 무위험 항목만 비활성화, 사용자 작업 프로세스는 건드리지 않음
- 수정 후 항상 복원 스크립트를 즉시 업데이트
- 복원 스크립트 고정 경로:
$env:USERPROFILE\Desktop\memory_restore.ps1 - 비활성화/수정 작업 실행 후, 복원 스크립트를 동기화하여 모든 기록 변경 사항을 포함
- 복원 스크립트 적용 범위: 서비스(NDU 포함), 계획된 작업, 실행 키, 레지스트리(메모리 압축, 페이지 파일)
- 여러 개의 복원 파일(예:
restore_services.ps1)을 만들지 않고, 모두memory_restore.ps1에 병합
- 복원 스크립트 고정 경로:
- 재부팅 전에 최종 결과를 보고하지 않음
- 비활성화 작업은 재부팅이 필요하며, 재부팅 전에는 현재 상태만 표시
안전 등급
| 수준 | 의미 | 예시 |
|---|---|---|
| 🟢 안전 | 알려진 불필요 항목, 비활성화해도 기능에 영향 없음 | 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 → 우선 수정:
- NDU 상태 확인
- 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 | 프로세스 목록에 나타나지 않아야 함 |
| DoSvc | Windows가 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이면 업데이트가 필요합니다.
수정 절차:
- Microsoft Update Catalog를 엽니다.
- 마지막 업데이트 날짜 기준으로 정렬하고 최신
.cab파일을 다운로드합니다. - 압축을 풀어 설치합니다:
C:\Windows\System32\expand.exe <cab 파일> -F:* C:\MT7921_Driver
pnputil /add-driver C:\MT7921_Driver\mtkwl6ex.inf /install
- 재부팅 후 적용됩니다. 참고: CAB 압축 해제 시 전체 경로
C:\Windows\System32\expand.exe를 사용해야 합니다. 그렇지 않으면 bash의expand명령과 충돌할 수 있습니다.
AMD 그래픽 드라이버 순수화 (Adrenalin 제거)
RadeonSoftware (~250MB)는 AMD 커널 드라이버에 의해 직접 실행되므로 서비스 비활성화가 소용없습니다. 근본적인 해결 방법:
- AMD 공식 사이트에서 최신 Adrenalin 드라이버
.exe를 다운로드합니다. - 설치 프로그램을 한 번 실행하여
C:\AMD\에 압축을 풀게 합니다 (설치 마법사가 나타나면 닫습니다). C:\AMD\...\Packages\Drivers\Display\WT6A_INF\*.inf를 찾습니다.- 순수 드라이버를 주입합니다:
pnputil /add-driver C:\AMD\AMD-Software-Installer\Packages\Drivers\Display\WT6A_INF\u*.inf /install
- 재부팅 후 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.ps1 | SearchHost / StartMenu / TextInputHost 등 비활성 프로세스 종료 |
scripts/audit_full.ps1 | 심층 감사: 메모리 압축, 페이지 파일, 비 MS 서비스, 시작 항목, 프로세스 트리 |
scripts/squeeze.ps1 | 남은 최적화 대상 스캔 (프로세스 >20MB, webview 부모 프로세스, ASUS 부활 감지) |
scripts/squeeze_kill.ps1 | webview 체인 + Widgets + PhoneExperienceHost 일괄 종료 + FontCache/CDP/투명도 변경 |
scripts/permanent_disable.ps1 | Widgets 그룹 정책 영구 비활성화 + Phone Link 제거 + explorer 재시작 |
scripts/find_respawns.ps1 | 프로세스 부활 원인 진단 (실행 키 / 작업 / 서비스) |
scripts/check_gpu.ps1 | GPU 모델 및 드라이버 버전 조회 |
scripts/download_amd.ps1 | AMD 드라이버 다운로드 (CDN에 차단될 수 있음) |
scripts/install_amd_driver_only.ps1 | AMD 드라이버 패키지 추출, pnputil로 순수 드라이버 주입 (Adrenalin 없음) |
scripts/update_driver.ps1 | MT7921 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/차단됩니다:
| 출처 | CDN | curl | wget | IWR | BITS |
|---|---|---|---|---|---|
| AMD drivers.amd.com | Akamai | ❌ 403 | ❌ 403 | ❌ 403 | ❌ 403 |
| ASUS dlcdnets.asus.com | Alibaba Cloud | ❌ | ❌ | ❌ | 미테스트 |
유일하게 신뢰할 수 있는 방법: Start-Process <url>로 브라우저를 열어 사용자가 수동으로 다운로드 버튼을 클릭하게 합니다. 다운로드가 완료되면 스크립트가 후속 작업을 처리합니다.
최적화 강력한 방법 (우선순위 높음에서 낮음)
| 우선순위 | 작업 | 예상 이점 | 위험 |
|---|---|---|---|
| 🔴 최고 | 메모리 압축 활성화 | 2-3 GB 추가 확보 효과 | 없음 (Windows 10/11 기본적으로 켜져 있어야 함) |
| 🔴 최고 | NDU 비활성화 | 비페이지 풀 누수 주요 원인 수정 | 매우 낮음 (네트워크 트래픽 통계가 비어짐) |
| 🟡 높음 | RadeonSoftware 종료 | ~250 MB | 제어판이 없으면 독점 그래픽 전환 등을 조정할 수 없음 |
| 🟡 높음 | 페이지 파일 HDD→SSD | IO 성능 향상 | 없음 (순수 이점) |
| 🟢 중간 | msedgewebview2 정리 | 100-500 MB | 관련 앱의 웹 인터페이스가 작동하지 않음 |
| 🟢 중간 | Widgets 비활성화 | ~20 MB + webview 체인 | 뉴스 카드가 보이지 않음 |
| 🟢 중간 | Phone Link 제거 | ~50 MB | PC에서 전화를 받을 수 없음 |
| 🔵 낮음 | 계획된 작업/서비스 비활성화 | 50-200 MB | 각 구성 요소 업데이트/기능 손실 |