문제 발생
CPU는 낮은데 응답 정지 문제가 나타난 입력, 직전 동작과 실제 결과를 함께 적습니다. 예를 들어 “가끔 실패”라고 쓰는 대신 정상 사례와 실패 사례를 하나씩 두고, 두 사례에서 달라진 version·설정·데이터를 표로 남깁니다.
| 사례 | 입력과 상태 | 결과 |
|---|---|---|
| 정상 | 가장 작은 정상 조건 | 기대한 결과 |
| 실패 | 한 조건만 달라진 재현 | 실제 오류·값 |
원인 분석
process 전체 CPU가 낮아도 event loop가 synchronous I/O나 특정 callback에 막히거나 connection pool이 고갈되면 요청이 멈출 수 있습니다.
기대 결과와 실제 결과를 나누고 둘이 달라지는 가장 작은 입력·설정·상태를 찾습니다. 확인하지 않은 원인을 사실처럼 단정하지 않습니다. event loop delay/utilization, CPU profile, heap/RSS, active handle, GC와 dependency latency를 함께 본다. 정상과 실패를 번갈아 실행하고, 이 원인이 맞다면 달라져야 할 값부터 확인합니다. 관련 없는 로그와 설정을 한꺼번에 바꾸지 않습니다.
해결 방안
확인된 원인과 직접 맞닿은 코드나 설정만 우선 수정합니다. 주제와 무관한 추상화나 운영 장치를 함께 추가하지 않습니다. CPU 작업과 I/O를 구분하고 queue, timeout, body, 동시성에 제한을 둔 뒤 정상 종료를 구현한다.
수정 전 실패 사례가 사라지고 기존 정상 사례가 유지돼야 합니다. 부하 테스트에서 처리량, p99, event loop delay, heap 기준선, 열린 handle과 종료 시간을 검증한다. 주제에 맞는 정상·경계·실패 조건을 다시 실행하고 수정 전 재현 사례가 사라졌는지 확인합니다. 가장 작은 실패 입력은 자동 테스트나 실행 가능한 점검 명령으로 남깁니다.
공식 문서와 적용 범위
문서의 기본값과 동작은 version에 따라 달라질 수 있습니다. 현재 runtime·framework version, 실제 입력과 요청 흐름에서 다시 확인합니다.