Witr:원클릭으로 프로세스 계보 트리 추적, 시스템 자원 블랙홀 종결
Witr는 Go로 작성된 오픈소스 프로세스 분석 도구로, 인터랙티브 TUI를 통해 프로세스 계보 트리, 포트 점유, 환경 변수를 보여주며 시스템 자원 블랙홀을 즉시 파악합니다.
{</* resource-info */>}
문제: 당신의 CPU는 도대체 무엇을 실행하고 있나요? #
노트북 팬이 미친 듯이 돌고 배터리가 빠르게 소모되지만, 범인이 누군지 모릅니다. Activity Monitor나 Task Manager를 열면 프로세스 이름들만 보이고, 근본적인 질문에는 답할 수 없습니다:
“Why is this running?”
- 이 프로세스는 누가 시작했나요?
- 왜 아직 실행 중인가요?
- 어떤 포트를 점유하고 있나요?
- 하위 프로세스는 무엇인가요?
- 종료하면 다른 것에 영향을 미치나요?
기존 도구(htop, top, ps)는 스냅샷만 제공하고 계보는 제공하지 않습니다.
Witr란 무엇인가? #
Witr(“Why is this running?")는 Go로 작성된 오픈소스 프로세스 분석 도구입니다. GitHub에서 15,042+ Stars를 보유하고 있으며, 모든 시스템 관리자와 개발자가 가장 궁금해하는 질문에 답합니다.
Witr의 핵심 기능: 프로세스의 완전한 인과 관계 체인을 보여줍니다 — init 시스템부터 대상 프로세스까지, “누가 누구를 낳았는지"를 완전히 보여주는 가족 트리입니다.
핵심 기능 #
1. 프로세스 계보 트리(Process Ancestry) #
Witr의 킬러 기능입니다. witr <PID>를 실행하면:
init(1)
└── systemd(1234)
└── dockerd(5678)
└── containerd-shim(9012)
└── node(3456) ← Your App
├── npm(7890)
└── webpack-dev-server(2345)
한눈에 보기: 이 Node.js 프로세스는 Docker 컨테이너 안에 있고, systemd에 의해 시작되었으며, webpack-dev-server는 그 하위 프로세스입니다.
2. 인터랙티브 TUI 모드 #
Witr는 단순한 명령줄 출력이 아니라 완전한 터미널 사용자 인터페이스를 갖추고 있습니다:
| 기능 | 단축키 | 설명 |
|---|---|---|
| 실시간 프로세스 목록 | ↑↓ | 모든 실행 중인 프로세스, 정렬 및 필터링 지원 |
| 포트 뷰 | p | 열린 포트와 해당 프로세스 즉시 확인 |
| 프로세스 상세 정보 | Enter | 완전한 계보 트리, 하위 프로세스, 환경 변수, 작업 디렉토리 |
| 신호 전송 | k | Kill, Terminate, Pause, Resume |
| 우선순위 조정 | r | Renice 프로세스 |
| 마우스 지원 | 🖱️ | 정렬, 행 선택 클릭 |
3. 포트 뷰 #
$ witr --ports
PORT PROTO PROCESS PID USER
8080 TCP node 3456 ubuntu
3000 TCP webpack-dev 2345 ubuntu
5432 TCP postgres 5678 postgres
22 TCP sshd 1234 root
누가 어떤 포트를 수신 대기하는지 한눈에 파악, 더 이상 lsof -i :8080이 필요 없습니다.
4. 환경 변수 및 작업 디렉토리 #
$ witr 3456 --env
PID: 3456
Command: node server.js
Working Directory: /home/ubuntu/myapp
Environment Variables:
NODE_ENV=production
PORT=8080
DATABASE_URL=postgresql://...
API_KEY=sk-***
구성 문제 디버깅의 신기 — 프로세스가 실제로 실행되는 환경을 직접 확인합니다.
5. 신호 전송 #
TUI에서 직접 신호를 보냅니다:
SIGKILL(9) — 강제 종료SIGTERM(15) — 우아한 종료SIGSTOP(19) — 일시 중지SIGCONT(18) — 재개
kill -9 PID를 외울 필요 없이, k를 누르고 선택하면 됩니다.
설치 #
원클릭 설치 #
# macOS / Linux
curl -fsSL https://github.com/pranshuparmar/witr/releases/latest/download/witr-$(uname -s | tr '[:upper:]' '[:lower:]')-$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/') -o witr
chmod +x witr
sudo mv witr /usr/local/bin/
# Go 설치
go install github.com/pranshuparmar/witr/cmd/witr@latest
지원 플랫폼 #
- ✅ Linux
- ✅ macOS
- ✅ Windows
- ✅ FreeBSD
사용 예시 #
기본 사용법 #
# 인터랙티브 TUI 시작
witr
# 특정 프로세스의 계보 트리 확인
witr 3456
# 포트 점유 확인
witr --ports
# 프로세스 환경 변수 확인
witr 3456 --env
# 지속 모니터링 모드
witr --watch
실제 시나리오 #
시나리오 1: 배터리 소모 범인 찾기
$ witr
# CPU로 정렬, node 프로세스가 80% 차지
# Enter로 상세 정보 확인: webpack-dev-server
# k → SIGTERM → 우아하게 종료
시나리오 2: 포트 충돌
$ witr --ports
# 8080이 점유된 것 발견
# 프로세스 확인: 어제 남겨진 테스트 서버
# k → SIGKILL → 포트 해제
시나리오 3: 컨테이너 디버깅
$ witr $(docker inspect -f '{{.State.Pid}}' mycontainer)
# 컨테이너 내 프로세스의 계보 트리 확인
# 환경 변수, 작업 디렉토리 한눈에 보기
유사 도구 비교 #
| 기능 | Witr | htop | ps | lsof |
|---|---|---|---|---|
| 프로세스 계보 트리 | ✅ 완전 | ❌ 없음 | ❌ 없음 | ❌ 없음 |
| 인터랙티브 TUI | ✅ 예 | ✅ 예 | ❌ 아니오 | ❌ 아니오 |
| 포트 뷰 | ✅ 내장 | ❌ 없음 | ❌ 없음 | ✅ 예 |
| 환경 변수 | ✅ 원클릭 | ❌ 없음 | ⚠️ 복잡 | ❌ 없음 |
| 신호 전송 | ✅ 인터랙티브 | ⚠️ 제한적 | ❌ 없음 | ❌ 없음 |
| 마우스 지원 | ✅ 예 | ✅ 예 | ❌ 아니오 | ❌ 아니오 |
| 크로스 플랫폼 | ✅ 4개 플랫폼 | ✅ 다중 플랫폼 | ✅ 범용 | ✅ 다중 플랫폼 |
아키텍처 #
Witr는 Go로 작성되었으며 운영 체제 기본 API를 활용합니다:
- Linux:
/proc파일 시스템 - macOS:
libproc+sysctl - Windows: Windows API
- FreeBSD:
kvm+sysctl
순수 Go 구현, CGO 의존성 없음(Windows 제외), 단일 바이너리 파일, 제로 의존성.
결론 #
Witr는 htop의 대체품이 아니라 프로세스 디버깅 전용 도구입니다. “Why is this running?“이라는 질문에 답해야 할 때, Witr는 어떤 도구보다 빠릅니다.
- 15K+ Stars는 실제 문제를 해결했음을 증명합니다
- 단일 바이너리 파일, 어디서든 사용 가능
- TUI 경험이 부드럽고, 마우스와 키보드 모두 지원
GitHub: pranshuparmar/witr
Stars: 15,042+ | Language: Go | License: 오픈소스