Young Gyu Blog
메뉴

The One and Only Reason to Customize IntelliJ IDEA Memory Settings

Young Gyu 2015-12-07

http://tomaszdziurko.pl/2015/11/1-and-the-only-one-to-customize-intellij-idea-memory-settings/

위의 글을 번역했습니다.

인텔리제이 메모리 설정

목표

메모리 사용과 속도 개선을 위한 최적의 메모리 설정을 찾는 것입니다.

jstat -gcutil

JDK에는 JVM과 Garbage Collector 통계를 모니터하기위한 툴입니다. 많은 옵션들이 있지만 우리는 여기서 다음의 옵션을 살펴보겠습니다.

-gcutil - Summary of garbage collection statistics.

S0: Survivor space 0 utilization as a percentage of the space’s current capacity. S1: Survivor space 1 utilization as a percentage of the space’s current capacity. E: Eden space utilization as a percentage of the space’s current capacity. O: Old space utilization as a percentage of the space’s current capacity. M: Metaspace utilization as a percentage of the space’s current capacity. CCS: Compressed class space utilization as a percentage. YGC: Number of young generation GC events. YGCT: Young generation garbage collection time. FGC: Number of full GC events. FGCT: Full garbage collection time. GCT: Total garbage collection time.

이 명령어의 출력 결과는 다음과 같습니다.

S0 S1 E O M CCS YGC YGCT FGC FGCT GCT 89.70 0.00 81.26 74.27 95.68 91.76 40 2.444 14 0.715 3.159

이 글에서 가장 중요한 파라메터들은 GC 이벤트(YGC, GFC) 수이고 그리고 컬렉션 타임(YGCT, FGCT) 입니다.

기본 설정

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

대용량 설정(붉은색)

-Xms2g -Xmx2g -XX:ReservedCodeCacheSize=1024m -XX:+UseCompressedOops -server -Xms2g -Xmx2g -XX:NewRatio=3 -Xss16m -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:ConcGCThreads=4 -XX:MaxPermSize=350m -XX:ReservedCodeCacheSize=240m -XX:+AlwaysPreTouch -XX:+TieredCompilation -XX:+UseCompressedOops -XX:SoftRefLRUPolicyMSPerMB=50 -ea -Dsun.io.useCanonCaches=false -Djava.net.preferIPv4Stack=true -Djsse.enableSNIExtension=false -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -Dawt.useSystemAAFontSettings=lcd ### 복잡한 설정(오렌지색)

-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

이 설정값들은 bin 폴더안의 idea64.vmoptions파일에 있습니다.

실험결과

생략합니다.

요약

인텔리제이 메모리 설정을 조그만 바꿈으로서 아주 상당한 성능의 개선을 볼수있다. 물론 더 많은 메모리를 할당할수록 더 많은 성능의 개선을 기대할 수 있다. 하지만 우리는 메모리를 사용하는 많은 프로그램들과 함께 사용해야하므로 성능과 메모리 소비에서 최적의 설정값들을 찾는것이 이 글의 목적이다. 대부분의 경우에는 Xmx값을 2g 또는 3g 사이에서 설정할 경우 가장 최상의 성능을 기대할 수 있는것 같다. 만약 당신이 좀 더 여유 시간이 있으시다면 jstat 또는 jvisualm가지고 여러 VM flags값들을 설정하면서 최고의 성능을 낼 수 있는 설정을 찾으면 좋을것같다.

이글을 읽고 찾은 나의 설정 값

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

Tags: IntelliJ, Memory, Settings

Category: 08