Windows 시스템 감시 · 원인 추적 도구
LagPolice
게임이 끊긴 순간의 시스템 상태를 기록하고 원인 후보를 좁히는 도구
CPU·메모리·I/O·UDP 사용량을 누적 관찰하고, 증상을 표시한 시점 전후의 기록을 비교합니다. 게임 로그에 남은 성능 이벤트와 시스템 기록을 같은 시간대에 놓아, 어떤 프로세스를 더 살펴볼지 판단할 근거를 만듭니다.
- Rust
- Tauri 2
- React
- TypeScript
- Win32 API
Interface
작업 화면

Engineering decisions
만든 방식
판단이 갈렸던 지점들
-
수집과 화면 갱신을 분리했습니다
Rust 백엔드는 목표 500ms 간격으로 시스템 상태를 수집하고, 화면은 1초마다 갱신합니다. 화면을 일시정지해도 수집은 이어집니다. 목표 주기와 실제 주기를 구분해 수집 간격과 소요 시간을 함께 보여줍니다.
-
증상이 지나간 뒤에도 앞뒤를 비교합니다
증상을 표시하면 직전 최대 30초와 이후 최대 10초의 기록을 묶습니다. 한 번의 최고값만 보는 대신 시점별 CPU·I/O·UDP 변화와 주요 프로세스를 비교합니다. 모든 프로세스를 무제한 보관하지 않으며, 후보 수 제한과 누락된 항목도 표시합니다.

Windows 앱에서 수동으로 남긴 시연 기록 · 증상 표시 전후의 시점별 지표 비교 -
프로세스 번호만으로 같은 대상을 판단하지 않습니다
Windows는 종료된 프로세스의 PID를 다른 프로세스에 재사용할 수 있습니다. PID와 생성 시각을 함께 사용해 누적 기록이 섞이지 않게 했습니다. 사용자가 종료를 요청할 때도 두 단계 확인을 거치고, 같은 Windows 핸들에서 생성 시각을 다시 검증합니다.
-
디스크 쓰기가 수집을 막지 않게 했습니다
감시 기록의 JSONL 저장은 별도 스레드와 크기가 제한된 대기열에서 처리합니다. 쓰기 속도가 수집을 따라가지 못하면 수집을 계속하면서 누락 수를 표시합니다. 파일 크기 제한이나 쓰기 오류가 발생한 경우에도 세션 통계 수집은 이어집니다.
-
시간 근거가 있는 기록끼리 연결합니다
게임 로그의 명시적인 이벤트 시각과 시스템 감시 기록을 대조합니다. 시각이 없는 경고는 파일 수정 시각으로 추정해 연결하지 않습니다. 표본 수집 사이의 짧은 이벤트는 놓칠 수 있으므로, 자료 없음과 시각 연결 불가를 구분하고 원인을 단정하지 않습니다.
Project notes
프로젝트 정보
- 형식
- Windows 데스크톱 앱 · 개발 중
- 데이터
- Windows API 기반 실시간 수집 · 로컬 JSON·JSONL 기록
- 수집 주기
- 목표 500ms · 화면 갱신 1초 · 실제 수집 간격 별도 표시
- 게임 연동
- 게임별 로그 파서와 시점 대조 · 게임마다 지원 범위와 검증 수준이 다름
- 해석 범위
- 관찰한 지표로 원인 후보를 제시하며, 동시 발생을 원인으로 확정하지 않음