loadtest/monitor.py (:9700, 단일 파일·외부 인프라 없음) + run_monitor.sh(대화형). e2e 부하(N=100 loadtest.py) 중 "프로세스가 잘 진행되는지, 코어가 전부 도는지, 병목이 어느 층인지"를 브라우저에서 2초 간격으로 본다: - 큐 추이: /v1/lps/ops 폴링 — PENDING/RUNNING/DONE/DEAD 라인 + 처리량(개/분) 타일 - 프로세스 그룹 CPU: worker/api/chrome/postgres — 병목 층 판독 (chrome 은 워커 자손만 집계해 사용자 브라우저와 분리, uvicorn spawn 자식은 부모로 api 귀속) - 코어별 사용률 막대: 멀티코어 활용 확인 - 현재 스냅샷 표 + 호버 툴팁 + 라인 끝 직접 라벨(dataviz 팔레트 검증 통과, 다크 서피스) - psutil 의존성 추가(로컬 관측 전용) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
32 lines
1.3 KiB
Bash
Executable File
32 lines
1.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
#
|
|
# LPS 실시간 모니터 실행 (대화형) — 부하/e2e 실행 중 큐 진행·코어별 CPU·병목을 브라우저에서 관측.
|
|
# loadtest.py(e2e 100건 등)와 같이 띄워두고 보는 용도. Grafana 대체가 아닌 로컬 경량 도구.
|
|
#
|
|
set -euo pipefail
|
|
cd "$(dirname "$0")" # lps/
|
|
|
|
PY=".venv/bin/python"
|
|
[[ -x "$PY" ]] || { echo "[error] .venv 가 없습니다. ./run_local_server.sh 를 먼저 한 번 실행하세요."; exit 1; }
|
|
|
|
# psutil 보장(관측 도구 전용 의존성)
|
|
"$PY" -c "import psutil" 2>/dev/null || { echo "[setup] psutil 설치..."; "$PY" -m pip install -q psutil; }
|
|
|
|
echo "── 모니터 설정 ──"
|
|
read -rp "모니터 포트 [9700]: " port
|
|
port="${port:-9700}"
|
|
read -rp "대상 API [http://localhost:9600] (엔터=유지): " base
|
|
base="${base:-http://localhost:9600}"
|
|
|
|
if lsof -ti:"$port" >/dev/null 2>&1; then
|
|
echo "[info] 포트 $port 사용 중 → 기존 프로세스 종료"
|
|
lsof -ti:"$port" | xargs kill 2>/dev/null || true
|
|
sleep 1
|
|
fi
|
|
|
|
echo
|
|
echo "[run] 모니터 → http://localhost:$port (대상 $base)"
|
|
echo " 워커·API·크롬·postgres 의 CPU 와 큐 추이가 2초마다 갱신됩니다. 중단: Ctrl+C"
|
|
echo
|
|
exec env BASE="$base" MONITOR_PORT="$port" "$PY" loadtest/monitor.py
|