시스템 안정화 — 프로세스 관리자 충돌 해결
개요
CPU 로드 209까지 치솟아 시스템 크래시. 근본 원인: 5개 독립 프로세스 관리자가 동시에 한선씨 VM을 재시작하면서 중복 인스턴스 폭증.
근본 원인
한선씨(crownyc) VM은 TCP 소켓 기반이지만, 모든 프로세스 관리자가 HTTP 헬스체크를 사용 → 항상 "DOWN" 감지 → 무한 재시작 루프.
충돌하던 5개 관리자
| 관리자 | LaunchAgent | 방식 | 문제 |
|---|---|---|---|
| health-monitor.sh | org.crowny.health-monitor | 10분 주기, bash | HTTP 체크 → 무한 재시작 |
| crowny-infra watchdog | org.crowny.watchdog | 10초 주기, Node.js | HTTP 체크 → kill+spawn 루프 |
| crowny-watchdog.sh | com.crowny.watchdog | 5분 주기, bash | HTTP 체크 → 블라인드 재시작 |
| crowny-supervisor | org.crowny.supervisor | KeepAlive, bash | 시작 시 전체 서비스 기동 |
| watchdog.sh | org.crowny.recovery | 5분 주기, bash | 3중 장애 해결 루틴 |
수정 내용
1. health-monitor.sh (/Users/ef/crowny-gateway/scripts/health-monitor.sh)
check_service(): 한선씨 타입은 TCP 포트 바인딩 확인으로 변경restart_hanseon(): 기존 프로세스 확인 + 10분 쿨다운 추가restart_node(): 10분 쿨다운 추가check_zombies(): 5개 → 15개 서비스로 확대check_port_conflicts(): 한선씨 VM 제외 (CWD 오탐 방지)
2. watchdog.js (/Users/ef/crowny-infra/lib/watchdog.js)
_probe(): crownyc 명령어 포함 서비스는net.createConnectionTCP 프로브 사용net모듈 import 추가
3. crowny-watchdog.sh (/Users/ef/.claude/scripts/crowny-watchdog.sh)
- 재시작 전
lsof포트 확인 + 프로세스 존재 확인 로직 추가
4. 중복 관리자 비활성화
com.crowny.watchdog→ unload (crowny-watchdog.sh)org.crowny.recovery→ unload (watchdog.sh)- 남은 관리자: health-monitor.sh (bash, 10분) + watchdog.js (Node, 10초)
결과
| 항목 | 수정 전 | 수정 후 |
|---|---|---|
| CPU 로드 | 209 | 3~7 |
| crownyc 프로세스 | 133+ | 10~15 |
| 중복 인스턴스 | solution×5, network×5, project×3 등 | 각 서비스 1개 |
| RAM 낭비 | ~4.7GB | 0 |
한선씨 동반파일
/Users/ef/crowny-infra/lib/워치독.한선— watchdog.js 로직 한선씨 구현
관련 파일
/Users/ef/crowny-gateway/scripts/health-monitor.sh/Users/ef/crowny-infra/lib/watchdog.js/Users/ef/.claude/scripts/crowny-watchdog.sh~/Library/LaunchAgents/org.crowny.health-monitor.plist~/Library/LaunchAgents/org.crowny.watchdog.plist