/ 2026년 10월 · 프라하
Valkey 9.1의 Active-Time과 이벤트 루프 지표로 포화도 측정하기
ValkeyConf 2026 · 선정. 비자가 제때 나오지 않았습니다.
/ 초록
Valkey 서버의 CPU가 100%라고 나옵니다. 포화된 걸까요? 그 숫자로는 알 수 없고, 이건 모니터링 버그도 아닙니다. Valkey의 메인 스레드와 I/O 스레드는 일을 바쁜 대기(busy-wait)로 기다립니다. 기다리는 스레드는 일하는 스레드와 똑같이 CPU를 씁니다. 보고된 한 사례에서는 처리량이 217K에서 452K QPS로 두 배가 되는 동안, 메인 스레드 CPU는 내내 100% 가까이에서 평평했고 전체 CPU는 400%에 고정되어 있었습니다. 그 숫자를 바탕으로 만든 알림, 대시보드, 오토스케일링 정책은 모두 잡음을 읽고 있는 셈입니다. Valkey 9.1이 답을 내놓았습니다. used_active_time_main_thread와 used_active_time_io_thread_N은 단조 시계 위에서 벽시계 시간에서 바쁜 대기와 블로킹 epoll을 빼서 측정하므로, 남은 여력이 실제로 보입니다.
이 세션은 INFO로 진짜 포화 신호를 만듭니다.
- 스레드별 실제 사용률을 위한 active-time 변화량
- I/O와 명령 실행을 나누는 eventloop_duration_sum − eventloop_duration_cmd_sum
- 평균이 숨기는 것을 잡아내는 latencystats 백분위수
그런 다음 이를 기준으로 I/O 스레드 수를 조정하고, 결과를 log-format json으로 내보냅니다. '여력이 얼마나 남았지?'에 답할 수 있게 되고, 끝내 아무것도 알려 주지 않던 CPU 알림을 은퇴시킬 수 있습니다.