마지막 업데이트 2026-09-17
AJ_CLYSMmWdT876이 생존한 15:08:03~18:12:48 동안 같은 ECS 태스크에 배정된 수업 job은 47건이다.
그중 실시간 미추종 경고(inference is slower than realtime)가 찍힌 job은 22건이고,
전부 17:32:53 이후에 몰려 있다.
이 문서는 좀비 job 슬롯 점유 원인 분석의 "미확정 — 17:32에 무엇이 임계를 넘겼나" 절을 뒷받침하는 전수 데이터다. 그 문서가 표본 3건으로 제시한 반증을 47건 전수로 확장한다.
테스트아리 job AJ_CLYSMmWdT876 시작 (워커 AW_eg5RnPhNXC2r)inference is slower than realtime 누적 시작 (총 712건, 최대 161.8초)AJ_HLqsFCpJhmgX부터 동거 job에도 경고 발생 시작 (촉발 요인 미확정)AJ_jHumBRHKhynN·AJ_5mBJJyaUWEmd 각 14·12건, 최대 5.9초로 회복)
CloudWatch /ppi/livekit/prod/agent의 @logStream은 ECS 태스크(= 워커 프로세스) 단위다.
좀비 job의 스트림은 agent/ppi-livekit-agent/b9238a5f30f04c3a9207df1601ba88bf이고, 이 태스크가 곧 워커 AW_eg5RnPhNXC2r다.
따라서 동거 job = 같은 스트림에 기록되면서 실행 구간이 좀비의 생존 구간과 겹치는 job으로 정의했다.
워커당 동시 job 상한은 2(PPI_AGENT_MAX_JOBS_PER_WORKER)이고 좀비가 3시간 5분 동안 1칸을 계속 점유했으므로,
표의 job들은 대부분 그 순간 남은 슬롯 1칸을 쓴 job이다.
slow = inference is slower than realtime 경고 건수, max = 단건 최대 누적 밀림, 합계 = 밀림 총합.
시작·종료는 해당 job의 첫·마지막 로그 시각(KST)이다.
| job_id | 시작 | 종료 | 길이 | slow | max | 합계 | 활동 |
|---|---|---|---|---|---|---|---|
AJ_rvktYDbFNnb3 | 14:48:38 | 15:17:04 | 28.4분 | — | — | — | tiki2e03_taka2 |
AJ_Z6a3KxoDTcWc | 15:22:11 | 15:23:19 | 1.1분 | — | — | — | 12_tiki |
AJ_yT3EDD2cNEsG | 15:31:08 | 15:32:17 | 1.1분 | — | — | — | newpp24_somiv1 |
AJ_8ffMYdSMrmCc | 15:35:03 | 15:36:54 | 1.9분 | — | — | — | tiki_basic |
AJ_cT6D9YR92rxz | 15:37:06 | 15:38:11 | 1.1분 | — | — | — | tiki_basic |
AJ_kDp82FB7CTBL | 15:38:59 | 15:39:09 | 0.2분 | — | — | — | select_test |
AJ_jwhsSiebhj6i | 15:40:26 | 15:41:17 | 0.9분 | — | — | — | tiki_basic |
AJ_TQKcvXZFsMp2 | 15:44:01 | 15:45:16 | 1.2분 | — | — | — | newpp26_gwv2 |
AJ_NRRunZrc6fhr | 15:47:23 | 15:47:36 | 0.2분 | — | — | — | tiki_basic |
AJ_oXMCKBQJmUey | 15:49:22 | 15:49:54 | 0.5분 | — | — | — | 14_taerin |
AJ_5KaDGH9xbQgx | 16:02:26 | 16:05:47 | 3.3분 | — | — | — | newpp24_somiv2 |
AJ_MQwKwC6otnZV | 16:07:48 | 16:15:52 | 8.1분 | — | — | — | pingpong01_HR02 |
AJ_kYrnhe5B2NaG | 16:15:58 | 16:19:17 | 3.3분 | — | — | — | pingpong01_WJ01 |
AJ_RvpPNUfoenES | 16:20:16 | 16:21:07 | 0.8분 | — | — | — | avatar_npp17_mom |
AJ_dtgBPpgnVYoE | 16:21:08 | 16:21:50 | 0.7분 | — | — | — | avatar_npp17_mom |
AJ_6oNSjAZFy7fN | 16:25:43 | 16:26:21 | 0.6분 | — | — | — | tiki2e03_taka2 |
AJ_9QBzgWfg2boz | 16:28:13 | 16:29:09 | 0.9분 | — | — | — | newpp24_ijv1 |
AJ_F8CMK54qdBcL | 16:34:47 | 16:35:36 | 0.8분 | — | — | — | tiki11_soyul |
AJ_7x2YavkC2pob | 16:38:26 | 16:41:30 | 3.1분 | — | — | — | tiki11_soyulB |
AJ_XNHKvWFVAPMd | 16:45:02 | 16:45:26 | 0.4분 | — | — | — | tiki_basic |
AJ_EHfnuaqBGkNu | 16:46:42 | 16:51:32 | 4.8분 | — | — | — | jiwoo_yes2 |
AJ_sr6BS37VeLGU | 17:01:47 | 17:05:14 | 3.5분 | — | — | — | tiki_basic |
AJ_Gu38t89n7Yde | 17:16:44 | 17:19:55 | 3.2분 | — | — | — | taeyang_v2 |
AJ_hrk9G764G5z2 | 17:20:03 | 17:21:07 | 1.1분 | — | — | — | newpp19E_ijv6 |
AJ_HLqsFCpJhmgX | 17:32:53 | 17:33:00 | 0.1분 | 5 | 2.6s | 8s | newpp27_hrv2 |
AJ_XjELGeGKgFs4 | 17:33:24 | 17:34:40 | 1.3분 | 24 | 73.2s | 478s | tiki2e02_taka1 |
AJ_FLNZBrD7Ztp9 | 17:34:43 | 17:35:02 | 0.3분 | 20 | 16.9s | 102s | tiki2e02_taka1 |
AJ_iHouDibfJcc5 | 17:35:09 | 17:35:54 | 0.8분 | 26 | 43.1s | 410s | tiki11_soyul |
AJ_obmJY8XB7REs | 17:36:17 | 17:37:44 | 1.4분 | 27 | 83.6s | 719s | newpp14_ijv1 |
AJ_hYD9AR6Fu3Jy | 17:38:12 | 17:38:59 | 0.8분 | 18 | 43.8s | 246s | tiki_basic |
AJ_DY89oyY6RV93 | 17:39:53 | 17:40:38 | 0.7분 | 29 | 41.4s | 451s | newpp14_granmav1 |
AJ_d8VDxbY7z3nf | 17:41:58 | 17:42:10 | 0.2분 | 12 | 9.4s | 49s | taeyang1_quiz |
AJ_DbwmRU43kTvH | 17:44:25 | 17:44:43 | 0.3분 | 11 | 15.1s | 68s | newpp27_hrv2 |
AJ_LhfxUz3pe9P3 | 17:46:38 | 17:46:54 | 0.3분 | 12 | 13.7s | 60s | taeyang1_quiz |
AJ_AhHecuzT4Dzp | 17:47:51 | 17:48:38 | 0.8분 | 14 | 44.8s | 207s | tiki2e03_taka |
AJ_owgAqPYpkJXH | 17:48:47 | 17:49:20 | 0.5분 | 22 | 30.0s | 240s | newpp07A_HR02 |
AJ_DViS4K4eeum5 | 17:52:24 | 17:52:52 | 0.5분 | 20 | 25.5s | 157s | tiki_basic |
AJ_uXZtwvF63s4J | 17:55:14 | 17:55:36 | 0.4분 | 28 | 19.1s | 222s | tiki2e03_rewarddoyoon |
AJ_UFVPFD5CsXpT | 18:02:40 | 18:03:04 | 0.4분 | 29 | 21.9s | 246s | select_test |
AJ_D85H6ApFQSc7 | 18:04:01 | 18:04:37 | 0.6분 | — | — | — | taeyang2_room |
AJ_Q3fshgS3TohD | 18:05:43 | 18:06:40 | 1.0분 | 40 | 54.1s | 826s | select_test |
AJ_JZN4sEHoR9JH | 18:07:48 | 18:08:33 | 0.8분 | 37 | 42.1s | 580s | 16_soyul |
AJ_tWGimDSjWshJ | 18:09:04 | 18:09:32 | 0.5분 | 28 | 24.9s | 247s | game_voice |
AJ_NCLoWZZFHZ39 | 18:09:49 | 18:10:12 | 0.4분 | 22 | 20.9s | 165s | newpp09_hrv1 |
AJ_KEYLYKEjgdoV | 18:10:34 | 18:10:43 | 0.1분 | 13 | 6.5s | 38s | pp35_twinB |
AJ_5kJCYEiJA8Vs | 18:10:55 | 18:11:22 | 0.5분 | 24 | 21.4s | 191s | taeyang2_room |
AJ_Zjn9Hykn8hDz | 18:11:46 | 18:12:26 | 0.7분 | 30 | 37.3s | 374s | 04_suho |
참고 — 좀비 자신: AJ_CLYSMmWdT876 (pid 720) 15:08:03~18:12:48, 경고 712건, 최대 161.8초, 합계 19,735초.
경고 건수는 생존 시간에 비례하므로 피해 job과 직접 비교하지 않는다(분당 발생률로 정규화해야 한다).
| 구간 | 동거 job | 경고 발생 job | 비율 |
|---|---|---|---|
| 15:08:03 ~ 17:32:52 | 24 | 0 | 0% |
| 17:32:53 ~ 18:12:48 | 23 | 22 | 96% |
확정 — 동거(슬롯 1칸 점유) 조건은 두 구간에서 동일한데 결과가 0%와 96%로 갈린다. 좀비의 존재만으로 피해를 설명할 수 없고, 17:32:53에 무언가가 바뀌었다.
미확정 — 무엇이 바뀌었는지는 이 데이터로 확정되지 않는다.
남은 후보는 기존 분석과 동일하다: 태스크 CPU 여력 소진, 좀비 프로세스의 메모리·상태 누적, 호스트 경합.
확정하려면 해당 ECS 태스크의 17:00~18:30 CPUUtilization·MemoryUtilization을 Maximum 통계로 봐야 한다(Average는 태스크 10~20개에 희석된다).
AJ_D85H6ApFQSc7 (18:04:01, 0.6분, 활동 taeyang2_room)AJ_UFVPFD5CsXpT 29건, 뒤 AJ_Q3fshgS3TohD 40건)에 있으면서 경고 0건이다.
세션 특성(발화량·활동 유형)인지 슬롯 배치 차이인지 미조사다.
임계 요인을 좁히는 단서가 될 수 있어 남겨 둔다.
inference is slower than realtime 원본 1,231행을
(timestamp, job_id, delay)로 중복 제거해도 1,231행 그대로다.
좀비의 712건도 원본 건수가 곧 실제 경고 횟수다.
delay는 단건 추론 소요가 아니라 누적 밀림이다(inference/vad.py:359-364). 161.8초는 "한 번에 161초 걸렸다"가 아니다.AJ_jHumBRHKhynN·AJ_5mBJJyaUWEmd는 구간 밖이라 제외했다 — 다른 문서의 "24개"와 숫자가 다른 이유다.Grafana CloudWatch 데이터소스(uid P034F075C744B399F), 로그그룹 /ppi/livekit/prod/agent, 범위 2026-09-15 14:00~19:30 KST.
전용 CLI는 ppicw(~/.claude/skills/ppi-grafana-health/scripts/cloudwatch-query.py).
fields @timestamp, @message
| filter @logStream = "agent/ppi-livekit-agent/b9238a5f30f04c3a9207df1601ba88bf"
| parse @message /"job_id": "(?<jid>AJ_[A-Za-z0-9]+)"/
| filter ispresent(jid)
| stats min(@timestamp) as t0, max(@timestamp) as t1, count(*) as n by jid
| sort t0 asc | limit 200
fields @timestamp, @message
| filter @logStream = "agent/ppi-livekit-agent/b9238a5f30f04c3a9207df1601ba88bf"
| filter @message like /inference is slower than realtime/
| sort @timestamp asc | limit 2000
--start를 넓힌다.
realtime input audio commit correlation quarantined; reconnecting 이후 무활동 지속이 더 빠르고 정확하다.quarantined 로그 자체는 고장 신호가 아니라 20분 주기 커넥션 재활용이라 정상 job도 찍는다 —
판별 오해 3가지 참고.apps/livekit-agent/agent.py:355-373 (_ppi_agent_load — job 개수만 반영, CPU 미반영)/ppi/livekit/prod/agent — 스트림 agent/ppi-livekit-agent/b9238a5f30f04c3a9207df1601ba88bfppicw logs --start "9/15 14:00" --end "9/15 19:30" --agg job