교육/[온라인] KOSTA EDU

[KOSTA] 자바 코드의 성능 향상 - 2일차

코드몬스터 2024. 2. 23. 09:46
728x90

 

💪 본 내용은 한국 소프트협회에서 직장인 대상 교육 및 다른 블로그를 읽고 정리한 내용입니다.

 

 

준비 사항

※ 실습 코드는 제외하고 작성했습니다.

  1.  Eclipse 2022-09 + 설치
  2. MySQL 8.0 설치
  3. JDK 11
  4. Visual Studio Code    - Editor
  5. Jmeter

이클립스 설치 버전

 


수업 내용

목차

  1. JVM
  2. Stack & Heap
  3. 자바 기본
  4. Class Loader
  5. JVM JIT Compiler
    --- 이하 2일차  ---
  6. GC
  7. 성능 향상
  8. 성능 최적화
  9. GC & Heap
  10. 성능 튜닝
  11. 성능 테스트

작성 중 입니다...!!

GC

 

성능 향상

 

성능 최적화

 

GC & Heap

  • 가비지 콜렉터의 대상이 되는 부분은 힙 영역이다.
  • JVM이 운영하며 일반적으로 힙 메모리에 free한 메모리가 없으면 작동한다.
  • 수행
    • JVM의 목표는 가용 시스템 자원을 기반으로 힙에 대한 디폴트 초기값을 찾는 것이다.
    • GC를 수행하는데 걸리는 시간을 기반으로 한다.
    • 최대 값으로 힙의 크기를 변경한다.
  • GC 로그 남기기
    • 자바 수행 시 -verbose:gc 옵션을 사용
    • GC 분석에서 가장 쉬운 명령어이다
    • java softleak.ProductMain 
    • java -Xmx20m -verbose:gc softleak.ProductMain.
  • GC Dump 분석
    • OPtion
    • -XX: HeapDumpOnOutOfMemoryError
    • -XX: 
    • java -Xmx20m -verbose:gc -XX:+HeapDumpOnOutOfMemoryError softleak.ProductMain
    • 코드를 수정하고 다시 위 명령어를 실행하면 문제가 없다.

 

 

 

 

성능 튜닝

1) 개요

  • 성능을 측정하고 튜닝하려면
    • JVM 구조, 메모리 관리, OS 기본
    • 애플리케이션의 소프트웨어 아키텍처와 사용 된 프레임워크
  • 성능 튜닝
    • 애플리케이션 내부를 프로파일링 도구로 분석한다.
      • 프로파일링 도구는 시스템 내부의 병목현상이 발생하는 지점을 찾는데 사용할 수 있다.

2) 고려 사항

  • CPU 속도 문제
    • 객체 생성과 GC 수행은 CPU 점유율이 높기에 생명 주기 짧은 객체나 비효율적 알고리즘, 병목현상이 발생되는 곳을 찾는다.
  • 메모리 문제
    • 객체의 수가 많이 발생하거나, 배열의 크기가 큰 경우 등의 메모리 구조를 조사하여 사용량을 줄인다.
  • DISK IO, 네트워크
    • 디스크 IO 는 애플리케이션 속도 저하를 유발하므로 찾아내어 제거하거나 변경한다.

3)  성능 테스트

  • 부하 테스트
    • 일반적으로 수행하는 성능 테스트, 성능을 벤치 마크
  • 스파이크 테스트
    • 순간적으로 사용자 수를 증가시키는 방식
  • 단위 성능 테스트
  • 통합 성능 테스트
  • 임계 성능 테스트
  • 안정성 테스트

 

4)  모니터링 도구

  • jcmd
  • jinfo
    • jinfo -flasg 프로세스 번호
  • jstat
  • jps
    • 현재 실행 중인 JVM 목록을 보여준다.

 

5) 프로파일링 도구

자바 애플리케이션의 메모리/CPU 사용률과 IO 및 스레드 활동 등을 측정하고 분석하는 프로파일링 도구

  • VisualVM
    • 오라클 개발 도구, 
  • Jprofiler
  • Eclipse Memory Analyz Tool(MAT)
  • Java Mission COntrol

 

 

6) 

 

성능 테스트

 

 

 

Heap Memory 를 DUMP 떠야한다?