자바 성능 튜닝 - 분석 툴
프로파일링 툴 - 개발자용 툴
- 소스 레벨의 분석을 위한 툴
- 애플리케이션의 세부 응답 시간까지 분석
- 메모리 사용량을 객체,클래스, 소스의 라인 단위까지 분석
- 가격이 APM 툴에 비해 저렴
- 사용자 수 기반으로 가격 선정
- 자바 기반의 클라이언트 프로그램 분석 가능
- 느린 메서드, 클래스 찾음
- 응답 시간 프로파일링 기능 : 메서드 단위 혹은 소스라인 단위로 응답 시간을 측정하며 보통 CPU시간, 대기시간 두개가 제공됩니다.
- 메모리 프로파일링 : GC의 대상을 찾거나 메모리 부족현상을 찾아주는데 클래스 및 메서드 단위나 소스 라인 단위로 메모리 사용량을 측정합니다.
APM 툴 - 운영 환경용 툴
- 애플리케이션의 장애 상황에 대한 모니터링 및 문제점 진단이 주 목적
- 서버의 사용자 수나 리소스에 대한 모니터링
- 실시간 모니터링을 위한 툴
- 가격이 프로파일링에 비해 비쌈
- CPU수를 기반으로 가격 선정
- 자바 기반의 클라이언트 프로그램 분석이 불가능
CPU 시간 : CPU를 점유한 시간을 의미합니다.
대기 시간 : CPU를 점유하지 않고 대기한 시간을 의미합니다.
System을 이용해 간단하게 속도를 측정할 수 있습니다.
System 클래스의 모든 메서드는 static으로 이루어져 있으며 객체를 생성할 수 없고 System.XXX로 사용해야 합니다.
JVM에서 사용할 수 있는 설정은 크게 두개로 Property와 Environment입니다.
Property는 속성으로 JVM에서 지정된 값으로 Properties로 사용합니다.
Environment는 환경으로 장비에 지정된 값으로 env로 사용합니다.
사용해서는 안되는 메서드
- gc() : gc를 명시적으로 실행
- exit(int status) : 수행중인 JVM을 멈춤
- runFinalization() : gc가 자동으로 실행하지 않고 finalilze()메서드를 명시적으로 실행 해야 함
System.crrentTimeMillis() : 현재의 시간을 ms로 리턴합니다.
ms : 1/1000초를 의미
System.nanoTime() : 현재의 시간을 ns로 리턴합니다.
ns : 1/1000000000초를 의미
=> 자세한 시간을 측정 하기 위해 사용
==> nanoTime()이 더 정확하게 나옵니다.
표준편차 : 여러 값들이 평균을 중심으로 얼마나 분산되어 있는지 나타내며 값이 적을 수록 데이터들이 평균에 가깝습니다.