성능
성능과 관련한 용어
지연시간 (Latency)
- Client 가 요청을 보낸 후 응답을 받기까지 걸린 시간을 말합니다. (주로 ms, s 단위)
처리량 (Throughput)
- 단위 시간동안 몇건의 요청을 처리할 수 있는지에 대한 정보입니다.
- 주로 1초동안 몇건의 요청을 처리할 수 있는지를 의미하는
TPS(Transaction Per Second) 단위
로 사용합니다. - 웹 어플리케이션에서 말하는 하나의 Transaction 은
하나의 Http 요청과 그에 대한 응답
을 의미합니다.
대역폭
- 네트워크가 단위 시간동안 전송할 수 있는 최대한의 처리량을 의미합니다.
- 처리량을 증가시키며 부하테스트를 하다보면 결국 대역폭에 가까워집니다.
성능 테스트의 목표
성능을 측정할 때는 처리량과 지연시간을 모두 측정해야 합니다.
초당 3000개의 요청(처리량) 이 들어올 때 99% 의 요청이 100ms 미만(지연시간)으로 처리되어야 합니다.
작업별 사용하는 자원
CPU
- 계산 작업. 이미지, 영상 인코딩, 암호화, 해시화 와 같은 작업에 CPU 자원을 많이 사용합니다.
RAM
- CPU 를 많이 쓰는 경우 함께 많이 쓰는 경우가 많습니다.
- ex) 인스턴스 대량 생성, 캐싱, 컬렉션 객체 등
Disk
- 파일 입출력, 로그 대량 발생시 많이 사용됩니다.
- ex) 데이터베이스에서 대량의 데이터를 입출력
지연시간, 처리량과의 관계
- Client 가 다수의 요청을 보내어
처리량이 증가
합니다. - 서버 자원의 사용량이 증가합니다.
- 프로세스, 스레드 간 자원 사용을 위한
대기시간이 길어집니다
.- Race Condition 이 발생합니다.
- 처리량이 기대 이상으로 낮아질 수 있습니다.
- 지연시간이 길어집니다.
- 처리되지 못한 요청이 쌓입니다.
- 요청 중 일부가 실패합니다.
데이터베이스
지연시간이 길어지는 상황
- 많은 요청이 들어올 때
- 많은 데이터 중 필요한 데이터를 찾아야 할 때
- 한번에 많은 데이터를 응답으로 줘야할 때
- 락이 너무 자주 걸리는 경우
- 트랜잭션을 지원하기 위해 데이터에 락이 걸립니다.
- 락이 걸리는 만큼 지연시간이 발생합니다.
- 때로는 데드락이 발생하여 응답이 처리되지 않기도 합니다.
실무가 아닌 환경에서의 성능 테스트
- 우선 한건씩 요청을 보내서 지연시간을 테스트합니다.
- 처리량을 점점 높이면서
지연시간이 치솟는 지점
을 차아봅니다. - 어떤 부분이 병목이 되는건지
가설
을 세워보고서버 자원 모니터링, 로그 등을 통해 병목 지점을 탐색
합니다. - 병목을 해결할 수 있는 방법을 적용합니다. (인프라 자원을 추가 등)