본문 바로가기
Programming/Java

[Optimizing Java] 1. 성능과 최적화

by 읽고 쓰는 개발자 2023. 6. 4.

성능 분석은 경험주의(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 성능 그래프 읽기

성능 테스트에서 자주 등장하는 패턴 

  • 성능 엘보 : 부하가 증가하며 예기치 않게 저하/지연이 급격히 발생. 차츰 악화되다가 결극 시스템 성능 급락하는 변곡점에 이르게 됨 
  • 암달의 법칙 : 확장성에는 제약이 따름. 프로세서 갯수 늘리더라도 순차 실행되어야 할 조각이 존재하면 선형 확장은 불가능  

 

 

 

 

출처 : 자바 최적화