부하 테스트 · 병목 찾기 · 퀴즈
퀴즈: 병목 찾기
문항 5개. 정답과 해설은 풀어 본 뒤에 보여 드립니다.
동시성을 10배로 올렸는데 처리량은 그대로이고 p95 만 10배가 됐다. 가장 타당한 결론은?
- 부하 생성기가 고장 났다
- 네트워크 대역폭이 이미 포화된 상태다
- 처리 단계가 직렬화되어 있어 늘어난 요청이 전부 대기로 쌓이고 있다
- 캐시 적중률이 떨어졌다
HikariCP 기본 풀 10 과 Tomcat threads.max 기본 200 이 만났을 때 벌어지는 일과 그 해결은?
- 커넥션이 남아돈다 — 풀을 5로 줄인다
- 스레드가 부족한 것이다 — threads.max 를 500 으로 올리고 풀은 그대로 둔다
- DB 가 느려진다 — 인덱스를 추가한다
- 대부분의 스레드가 커넥션 대기에 빠진다 — 풀을 30으로 올리고 connection-timeout 을 5초로 줄이며 threads.max 는 오히려 50으로 축소한다
커넥션 풀을 키웠는데도 대기가 계속 길다면?
- 점유 시간이 길다는 뜻이므로 느린 쿼리나 긴 트랜잭션을 고쳐야 한다
- 풀을 두 배로 더 키운다
- 스레드 풀도 함께 키운다
- 타임아웃을 늘려 대기를 허용한다
허용 대기 시간 200ms, 평균 처리 20ms, 워커 10개일 때 큐 길이 상한의 대략적인 값과 그 이유는?
- 10 — 워커 수와 같아야 하므로
- 100 — 허용 대기 시간을 평균 처리 시간으로 나눈 값이므로
- 1000 — 여유를 크게 두어야 하므로
- 무한 — 요청을 버리면 안 되므로
커넥션 풀 초기값 공식으로 저자가 제시한 것은?
- (코어 수 × 2) + 디스크 축 수
- 동시 사용자 수 ÷ 10
- 인스턴스 수 × 10
- 최대 RPS ÷ 100