csct3434
[자바 성능 튜닝 이야기] 02. 내가 만든 프로그램의 속도를 알고 싶다 본문
APM 툴 VS 프로파일링 툴
프로파일링 툴
- 소스 레벨의 분석을 위한 툴
- 애플리케이션의 세부 응답시간까지 분석 가능
- 메모리 사용량을 객체, 클래스, 소스 라인 단위까지 분석 가능
- 자바 기반의 클라이언트 프로그램 분석 가능
- 개발자용 툴
- 주로 느린 메서드 및 클래스를 찾는 것을 목적으로 사용
APM 툴
- 애플리케이션의 장애 상황에 대한 모니터링 및 문제점 진단이 주 목적
- 서버의 사용자 수나 리소스에 대한 모니터링 가능
- 실시간 모니터링을 위한 툴
- 자바 기반의 클라이언트 프로그램 분석 불가능
- 운영 환경용 툴
- 목적에 따라 용도가 상이 (어떤 APM 툴은 문제점 진단에 강한 반면, 다른 APM 툴은 시스템 모니터링 및 운영에 강함)
프로파일링 툴의 기능
응답 시간 프로파일링 기능
- 하나의 클래스 내에서 사용되는 메서드 단위의 응답 시간을 측정 (툴에 따라 소스 라인 단위로 측정 가능)
- 보통 CPU 시간과 대기 시간을 제공
메모리 프로파일링
- GC 대상 혹은 메모리 누수 현상이 발생하는 부분을 찾기 위함
- 클래스 및 메서드 단위의 메모리 사용량을 분석 (툴에 따라 소스 라인 단위로 측정 가능)
System 클래스
- System 클래스의 모든 메서드는 static 메서드
- JVM에서 사용하는 설정 : Property(JVM에 설정된 값), Environment(시스템에 설정된 값)
실행 시간을 측정하는데 사용되는 메서드
- static long currentTimeMillis()
- static long nanoTime()
- 클래스 로딩에 의한 지연, JIT Optimizer에 의한 성능 최적화 등의 이유로 초기의 값은 느리게 나올 수 있음
운영 환경에서 절대로 사용하면 안되는 메서드
- static void gc() : 명시적으로 GC를 수행하는 메서드
- static void exit(int status) : JVM을 중지시키는 메서드
- static void runFinalization() : 참조 해제 작업을 기다리는 모든 객체의 finalize() 메서드를 수동으로 실행
성능 측정 라이브러리
- JMH, Caliper, JUnitPerf, JUnitBench, ContiPerf 등
- JUnitPerf, JUnitBench, ContiPerf는 JUnit으로 만든 테스트 코드를 실행하는데 사용됨
- ContiPerf : 사용하기 매우 간편하고 그래프로 된 결도를 제공하지만, 응답 시간이 나노 단위로 제공되지 않음
- JMH : OpenJDK에서 만든 성능 측정용 라이브러리, 관련 자료가 매우 적음
(JMH 사용 예시 작성 예정)
'개발 서적 > 자바 성능 튜닝 이야기' 카테고리의 다른 글
[자바 성능 튜닝 이야기] 08. synchronized (0) | 2024.05.06 |
---|---|
[자바 성능 튜닝 이야기] 06~07. static, reflection (0) | 2024.05.05 |
[자바 성능 튜닝 이야기] 05. 조건문과 반복문의 성능 (0) | 2024.05.05 |
[자바 성능 튜닝 이야기] 04. Collection 성능 비교 (0) | 2024.04.28 |
[자바 성능 튜닝 이야기] 03. String vs StringBuffer vs StringBuilder (0) | 2024.04.28 |