성능 분석은 경험주의(empiricism)와 인간 심리학(human psychology)이 교묘히 어우러진 분야
성능 분석에서 중요한 건 1. 관측지표의 절대 수치 2.엔드유저 3.기타 이해관계자들이 그 수치를 어떻게 받아들이는가 하는 점
이 책에서는 이 뻔한 패러독스를 해결하는 내용을 다룸
1.1 자바 성능 : 잘못된 방법
- 최신 자바의 가상 디스패치 성능은 엄청나게 좋아졌음
- 특히 JVM의 자동 인라이닝(automatic managed inlining) 덕분에 가상 디스패치조차 대부분의 호출부(call site)에서 사라졌음
- 온라인상의 오래된 정보를 그대로 받아들이기 어려운 이유
인라이닝 : 메소드를 상수로 교체하는 것을 메소드 인라이닝(Method Inlining)
- 따라서 우수한 성능 목표를 달성하기 위해 필요한 여러가지 단면을 종합적으로 집중 조명
- 전체 소프트웨어 수명주기의 성능 방법론
- 성능과 연관된 테스트 이론
- 측정,통계,툴링(도구선정)
- 분석 스킬 (시스템 + 데이터)
- 하부 기술과 메커니즘 (장치, 수단)
- 최적화 휴리스틱과 코드 수준의 테크니 (끝부분)
- 성능 최적화의 일반적 원칙
- JVM을 더 빠르게 작동시키는 마법은 없다.
- 자바를 더 빨리 실행하는 트릭은 없다.
- 우리가 모르는 비밀 알고리즘도 없다.
1.2 자바 성능 개요
- 자바는 태초부터 실용적 언어. 생산성이 나온다면 성능 희생은 감수할 만 하다는 입장.
- 따라서 low level의 일부 제어 기능을 포기하고 메모리 관리(가비지 수집)를 자동으로 해줌으로써 개발자의 부담을 덜어주었지만
- JVM 전반에서 관리 서브시스템은 어플리케이션 런타임 동작에 복잡도 유발
- 환경이 복잡해질수록 시스템을 개별적으로 판단하기 어려움. (성능 측정값을 온전히 신뢰하기 어려운 이유)
- 성능 측정 자체도 어플리케이션 오버헤드 유발하기 때문에 세심한 손질 필요하며, 교조적이고 우직한 기법으로 파악하면 부정확할 확률이 높음
1.3 성능은 실험과학이다.
성능은 다음과 같은 활동을 하면서 원하는 결과를 얻기 위한 일종의 실험과학
- 원하는 결과 정의
- 기존 시스템 측정
- 요건을 충족시키려면 무슨 일을 해야 하지 정하기
- 개선 활동 추진
- 다시 테스트하기
- 목표가 달성됐는지 판단
성능 분석은 비기능 요건을 정의하고 달성하는 활동. 통계치에 근거해 적절히 결과를 처리하는 활동
1.4 성능 분류
기본적인 성능 지표
- 처리율
- 시스템이 수행 가능한 작업 비율을 나타낸 지표.
- 보통 일정 시간 동안 완료한 작업 단위 수로 표시 (예. 초당 처리 가능한 트랜잭션 수)
- 지연 (latency)
- 종단 시간
- 하나의 트랜젝션이 처리되어 그 결과가 리턴되기까지 소요된 시간
- 용량
- 시스템이 보유한 작ㅈ업 병렬성의 총량. 동싯 처리 가능한 작업 단위(트랜잭션) 개수
- 용량 - 처리율,지연과 밀접한 연관 (비례 관계)
- 사용률
- 리소스 효율적 활용
- 효율
- 처리율을 리소스 사용률로 나눈 값으로 측정
- 낮은 리소스로 처리율이 높다면 효율 높은 것
- 확장성
- 리소스 추가에 따른 처리율 변화는 시스템의 확장성을 가늠하는 척도
- 완벽한 선형 확장 : 클러스터 2배 -> 트랜잭션 처리량 2배 (정비례) : 현실적으로 어려움
- 저하
- 어떤 형태로든 시스템이 더 많은 부하를 받으면 지연/처리율 측정값에 변화가 생김 (지연 증가 => 저하)
- 측정값 사이의 연관 관계 : 성능 측정값은 서로 연결되어 있음
1.5 성능 그래프 읽기
성능 테스트에서 자주 등장하는 패턴
- 성능 엘보 : 부하가 증가하며 예기치 않게 저하/지연이 급격히 발생. 차츰 악화되다가 결극 시스템 성능 급락하는 변곡점에 이르게 됨
- 암달의 법칙 : 확장성에는 제약이 따름. 프로세서 갯수 늘리더라도 순차 실행되어야 할 조각이 존재하면 선형 확장은 불가능
'Programming > Java' 카테고리의 다른 글
[Optimizing Java] 2. JVM 이야기 (0) | 2023.06.11 |
---|---|
[리팩토링] 냄새22,리팩토링42 (0) | 2023.05.27 |
[리팩토링] 냄새17,리팩토링37 (0) | 2023.05.21 |
[리팩토링] 냄새16,리팩토링36 (1) | 2023.05.21 |
[리팩토링] 리팩토링21~23 (0) | 2023.05.07 |