개발

IntelliJ Memory Option 최적화

snow-line 2020. 7. 26. 23:37
반응형

IntelliJ를 기본 설정으로 사용하면 메모리가 부족해서 느려지는 현상이 나타나기 떄문에 VM 설정을 변경해야 합니다.

이번 포스팅에서는 Memory 옵션 값 변경과 실행 시간을 측정하였습니다.

 

1. 사양 기준

 - RAM 32GB, CPU i9 MacBook 16인치(2019)

 - 프로젝트 : 코드 85,000 라인 (Java8 및 Maven)

 

2. 테스트 시나리오

 - 컴퓨터에서 꼭 필요한 프로그램이 아닌 모든 응용프로그램을 종료합니다.

 - 모니터링 도구는 jstat 를 사용합니다.

 - Idea를 실행해서 완료까지 걸린 시간을 측정합니다.

 - Idea에서 프로젝트 로딩 완료까지 걸린 시간을 측정합니다.

 

3. 설정 옵션

 - 설정 옵션은 4가지로 구분하며 색상으로 표시합니다. 

 - 기본 설정 / A 설정 / B 설정 / C 설정

 

 1) 기본 설정

-Xms128m
-Xmx750m
-XX:MaxPermSize=350m
-XX:ReservedCodeCacheSize=240m
-XX:+UseCompressedOops

 

2) A 설정

-Xms2g
-Xmx2g
-XX:ReservedCodeCacheSize=1024m
-XX:+UseCompressedOops

3) B 설정

-Xms1024m
-Xmx4096m
-XX:ReservedCodeCacheSize=1024m
-XX:+UseCompressedOops

4) C 설정

-server
-Xms2g
-Xmx2g
-XX:NewRatio=3
-Xss16m
-XX:+UseConcMarkSweepGC
-XX:+CMSParallelRemarkEnabled
-XX:ConcGCThreads=4
-XX:ReservedCodeCacheSize=240m
-XX:+AlwaysPreTouch
-XX:+TieredCompilation
-XX:+UseCompressedOops
-XX:SoftRefLRUPolicyMSPerMB=50
-Dsun.io.useCanonCaches=false
-Djava.net.preferIPv4Stack=true
-Djsse.enableSNIExtension=false
-ea

 

 

4. 시작 시간 측정 결과

- IDEA를 시작하여 실행 완료되는 시간을 측정합니다.

IDEA 실행 측정 결과

 - IDEA의 시작 시간은 메모리 설정에 따른 변화가 없는 걸 볼때 메모리에 의존적이지 않는 것을 확인할 수 있습니다.

 

5. 프로젝트 로딩 시간

 1) 다음은 준비한 프로젝트를 로딩하는 시간을 측정합니다.

가비지 컬렉션 측정 시간

 - Garbage Collection은 기본 설정일 경우 로딩시간이 매우 많이 걸리는 것을 확인할 수 있습니다.

 

 

 2) 이번에는 Full GC 수행 시간을 측정해보겠습니다.

Full GC 수행 시간

 - Full GC 수행 시간을 비교해보면 기본 설정은 다른 설정에 비해 수행 시간이 매우 높은 것을 확인 할 수 있습니다.

 - Full GC 시간이 오래 걸릴 수록 IntelliJ의 응답 속도가 느려지는 원인이 됩니다.

 

 3) Total Garbage Collection Time(Minor GC + Full GC) 수행 시간을 측정해보겠습니다.

 

Total Garbage Collection 수행 시간
단일 Full GC 수행 시간 측정

- GC 수행 시간을 측정해보니 전체적으로 B 설정 값(Xmx 4G)의 수행 속도가 다른 설정(Xmx 2G) 보다 빠른것을 확인할 수 있었습니다.

 

6. 테스트 결과 VM 설정

- 테스트 결과를 통해 다음과 같은 설정을 추천드립니다.

-server
-Xms4096m
-Xmx4096m
-XX:NewRatio=3
-Xss16m
-XX:+AlwaysPreTouch
-XX:+TieredCompilation
-XX:ReservedCodeCacheSize=240m
-XX:SoftRefLRUPolicyMSPerMB=50
-XX:+UseCodeCacheFlushing
-Dsun.io.useCanonCaches=false-ea
-XX:CICompilerCount=2
-Dsun.io.useCanonPrefixCache=false
-Djava.net.preferIPv4Stack=true
-Djsse.enableSNIExtension=false
-Djdk.http.auth.tunneling.disabledSchemes=""
-XX:+HeapDumpOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow
-Djdk.attach.allowAttachSelf=true
-Dkotlinx.coroutines.debug=off
-Djdk.module.illegalAccess.silent=true
-XX:+UseCompressedOops
-Dfile.encoding=UTF-8
-XX:+UseG1GC
-XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log
-XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof
반응형

'개발' 카테고리의 다른 글

AngularJs 보안 가이드  (0) 2020.07.28
AngularJs 성능 개선 가이드  (0) 2020.07.28
Redis 튜닝하기  (0) 2020.07.27
프리랜서 계약서 양식  (0) 2020.07.27
Intellij Freezing(인텔리J 프리징) 현상 해결  (0) 2020.07.26