학습(구)/Java(구)

자바 성능 튜닝 - 분석 툴

잉아당 2021. 4. 28. 23:12
728x90

프로파일링 툴 - 개발자용 툴

- 소스 레벨의 분석을 위한 툴

- 애플리케이션의 세부 응답 시간까지 분석

- 메모리 사용량을 객체,클래스, 소스의 라인 단위까지 분석

- 가격이 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()이 더 정확하게 나옵니다.

 

표준편차 : 여러 값들이 평균을 중심으로 얼마나 분산되어 있는지 나타내며 값이 적을 수록 데이터들이 평균에 가깝습니다.