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의 시작 시간은 메모리 설정에 따른 변화가 없는 걸 볼때 메모리에 의존적이지 않는 것을 확인할 수 있습니다.
5. 프로젝트 로딩 시간
1) 다음은 준비한 프로젝트를 로딩하는 시간을 측정합니다.
- Garbage Collection은 기본 설정일 경우 로딩시간이 매우 많이 걸리는 것을 확인할 수 있습니다.
2) 이번에는 Full GC 수행 시간을 측정해보겠습니다.
- Full GC 수행 시간을 비교해보면 기본 설정은 다른 설정에 비해 수행 시간이 매우 높은 것을 확인 할 수 있습니다.
- Full GC 시간이 오래 걸릴 수록 IntelliJ의 응답 속도가 느려지는 원인이 됩니다.
3) Total Garbage Collection Time(Minor GC + 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 |