이 글은 자바 최적화 (Optimizing Java,가장 빠른 성능을 구현하는 검증된 10가지 기법) 책을 학습한 내용을 토대로 작성되었습니다.
Prologue
- 기본적인 성능 지표에 대해 알아보자.
성능 분류
처리율 (Throughput)
일정 시간 동안 완료한 작업 단위 수 // ex) TPS
-
시스템이 수행 가능한 작업 비율을 나타내는 지표이다.
-
보통 일정 시간동안 완료한 작업 단위 수로 표시를 한다.
ex) 초당 처리 가능한 트랜잭션 수(=TPS)
-
처리율 테스트 시
실행 간 워크로드(workload) 역시 일정하게 유지해야 한다.
// 워크로드 : 시스템이 주어진 시간 내에 처리해야 할 작업 할당량
지연 (Latency)
수도관 자체의 길이
-
1초에 100L를 흘려보내는 수도관의 처리율 은
바로 1초에 처리되는 부피(100L)이다.
-
이때 지연은 수도관 자체의 길이에 해당한다.
-
즉 하나의 트랜잭션을 처리하고
그 결과를 반대편 수도관 끝에서 바라볼 때까지 소요된 시간이다.
그러므로 종단 시간이라고 부르기도 한다.
용량 (Capacity)
시스템이 동시 처리 가능한 작업 단위 (= 트랜잭션)
-
시스템이 보유한 작업 병렬성의 총량
즉 시스템이 동시 처리 가능한 작업단위 개수(= 트랜잭션)를 말한다.
-
용량은 처리율 과 연관이 있다.
시스템에 부하가 증가할수록 처리율 도 당연히 영향을 받고
이런 이유로 용량은 어떤 처리율 또는 지연 값을 전제로 가능한 처리량으로 표시한다.
사용률 (Utilization)
시스템 리소스를 얼마나 사용했는가?
-
성능 분석 업무 중 가장 흔한 Task는
시스템 리소스를 얼마나 효율적으로 활용하는 것이다.
-
사용률은 워크로드에 따라서 리소스별로 들쑥날쑥할 수 있다.
예를 들어
계산 집약적 워크로드(ex. 암호화)를 주면
CPU 사용률은 100%에 육박하지만 메모리 사용률은 얼마 나오지 않는다.
효율 (Efficiency)
효율 = 처리율 / 리소스 사용률
-
동일 처리율 처리를 위해
더 많은 리소스를 사용한다면 효율이 낮은 것이다.
확장성 (Scalability)
리소스 추가에 따른 처리율의 변화 !
-
리소스 추가에 따른 처리율 변화는
시스템의 확장성을 가늠하는 척도이다.
-
시스템 확장성은 궁극적인 목표는
투입한 리소스만큼 처리율이 상승하는 것이다.
서버 클러스터 기반으로 구축된 시스템이 있다.
클러스터를 2배 확장하면 처리율은 얼마나 올라갈까?
트랜잭션 처리량도 2배 늘었다면
이 시스템은 완벽한 선형 확장을 달성한 것이다.
그러나 현실적으로 선형 확장을 달성하기란 매우 어렵다.
보통 시스템 확장성은
하나의 단순한 상수 인자가 아니라
여러 가지 인자들의 영향을 받는다.
그러므로 리소스를 늘리면 거의 선형적으로 확장되지만
대부분 부하가 높아지면 완벽한 확장을 저해하는 한계점에 봉착하게 된다.
저하 (Degradation)
지연이 증가하는 양상
-
시스템이 더 많은 부하를 받으면
지연과 처리율에 변화가 생긴다.
-
그 변화는 사용률에 따라 다르다.
시스템을 덜 사용하고 있으면 측정값이 느슨하게 변하지만
시스템이 풀 가동된 상태라면 처리율이 더는 늘어나지 않는 양상을 보인다.
-
즉 지연이 증가하는 양상을 띠게 된다.
이런 현상을 부하 증가에 따른 저하라고 한다.
Summary
-
성능 활동을 수행하는 데
필요한 기본 용어들(= 성능 지표)에 대해 알아봤다.
처리율 / 지연 / 용량 / 사용률 / 효율 / 확장성 / 저하
-
그리고 각 지표와 관련된 성능 테스트 패턴이 존재하는데
관련해서는 [Java Optimizing] 4. 성능 테스트 패턴 및 안티패턴 : 성능 테스트 유형 글을 읽어보는 걸 추천한다.