2012년 5월 3일 목요일

Eclipse & JVM 튜닝을 위한 기초지식


개요


Eclipse의 시작은 $ECLIPSE_HOME/eclipse.ini파일에 정의된 옵션으로 제어된다. 만약 $ECLIPSE_HOME이 정의되지 않았다면 Eclipse가 설치된 디렉토리(맥을 사용하고 있다면 Eclipse.app/Contents/MacOS 디렉토리를 참조하게 된다)의 eclipse.ini파일을 참조하게 된다.

eclipse.ini는 커맨드라인 옵션을 포함하는 텍스트 파일로 커맨드라인에 추가된 명령어들은 Eclipse가 시작되었을 때 사용된다. 여기에는 많은 옵션들이 존재하며 다음의 좌표를 참고할 수 있다.

*중요
  • 각옵션과 옵션에 해당하는 각각의 변수들은 반드시 해당 라인에 위치해야 한다.
  • -vmargs다음의 라인들은 JVM의 변수로 통과되어 지기 때문에 eclipse를 위한 변수나 옵션들은 반드시 -vmargs 앞에 위치해야한다(1번의 규칙과 비슷하다고 볼 수 있음)

JVM 지정하기


Eclipse 튜닝을 위해 가장 추천되는 방법으로는 Eclipse를 실행하기 위한 특정 JVM을 지정하는 것 이다. 이렇게 하는 것은 정확히 어떤 JVM에서 Eclipse가 동작하고 있는것인지를 보장해주며 시스템에대한 표준 JVM이 변경되는 것과 같은 시스템 변화에 대한 영향을 받지 않도록 하여준다(JVM은 여러개가 설치될 수 있고 어떤것을 시스템 표준으로 사용할지는 설정하기 나름임). 많은 사용자들이 기본값으로 어떤 JVM이 사용될거라는 것을 알고 있다고 생각하기 때문에 당황스러운 실수를 하기도 한다. eclipse.ini는 그런 문제에 대해 확신을 갖을 수 있도록 해줄 것 이다.

다음의 eclipse.ini의 예시는 -vm 옵션의 정확한 용법의 예를 보여주고 있다.
*주의 -vm 옵션의 형식과 관련해서 정확하게 기술하는 것이 무엇보다 중요하다.
  • -vm 옵션과 해당하는 값(경로)는 반드시 다른 라인에 위치해야 한다.
  • 값은 반드시 Java 홈 디렉토리만이 아닌 Java 실행을 위한 절대경로 혹은 상대경로이어야 한다.
  • -vm 옵션은 반드시 -vmargs 옵션의 앞에서 선언 되어야 하며 -vmargs 다음에 오는 모든 값은 JVM으로 곧바로 전달된다.
다음은 eclipse.ini에 -vm 변수를 추가하고 최대 힙 공간을 증가시킨 예제이다.

        -startup
    plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar
    --launcher.library
    plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.100.v20110502
    -product
    org.eclipse.epp.package.java.product
    --launcher.defaultAction
    openFile
    --launcher.XXMaxPermSize
    256M
    -showsplash
    org.eclipse.platform
    --launcher.XXMaxPermSize
    256m
    --launcher.defaultAction
    openFile
    -vm
    C:\Java\JDK\1.6\bin\javaw.exe
    -vmargs
    -Dosgi.requiredJavaVersion=1.5
    -Xms40m
    -Xmx1024m

한가지 기억해야 할점은 이러한 옵션들에 대한 적절한 값이 운영체제나 Eclipse 패키지 버전에 따라 다를 수 있다는거다.

Java HotSpot VM 옵션


Java HotSpot VM 옵션들의 범주

Java HotSpot VM이 인식할 수 있는 표준 옵션에 대한 설명은 윈도우즈, 솔라리스 그리고 리눅스에 대한 Java Application Launcher 참고 페이지에서 확인할 수 있다. 다음에 다를 내용들은 Java HotSpot VM에서 인식할 수 있는 비표준 옵션에 대한 이야기이다.
  • -X로 시작되는 옵션들은 비표준(모든 VM에 대해 지원되는 것을 보장하지 않음)이며 추후 JDK 릴리즈에서 별다른 공지 없이 변경될 수 있다.
  • -XX로 정의되는 옵션들은 불안정한 옵션이며 마찬가지로 별다른 공지 없이 변경 될 수 있다.
1.3.0 이전의 JDK 사용자의 경우 Exact VM 플래그를 참고하여야 한다(Java HotSpot VM은 1.3.0이후에 도입되었음).

일부 유용한 -XX 옵션들

기본 값들은 Java SE6의 Solaris Sparc 버전에서 -server옵션 목록에 포함되며 일부 옵션들은 아키텍쳐/OS/JVM 버전에 따라 다양할 수 있다. 플렛폼 별로 갖는 다른 기본 값은 설명을 참고하면 된다.
  • Boolean 옵션들은 -XX:+<option>을 이용해서 켜거나 -XX:-<option>을 이용해서 끌 수 있다.
  • Numeric 옵션들은 -XX:<option>=<number>를 이용해서 설정할 수 있다. 이렇게 표기된 숫자들은 메가바이트에 대해 'm' 또는 'M'을 붙여 표현할 수 있고 킬로바이트는 'k' 또는 'K' 그리고 기가바이트에 대해 'g' 또는 'G'를 붙일 수 있다.(예를 들자면 32k는 32768과 같다)
  • String 옵션들은 -XX:<option>=<string>을 이용해서 설정할 수 있다. 일반적으로 파일 또는 경로를 지정하거나 옵션에 해당되는 명령어들을 사용할 수 있다.
설명에 manageable이라는 플래그가 표시된 것은 JDK 관리 인터페이스(com.sun.management.HotSpotDiagnosticMXBean API)와 JConsole을 통해 동적으로 사용될 수 있다. Java SE 6 플렛폼 어플리케이션의 모니터링과 관리의 Figure 3에서 예를 보이고 있다. manageable 플래그는 jinfo-flag를 통해서 설정할 수도 있다.

다음의 옵션들은 다소 느슨한 기준으로 그룹지어져 각 카테고리에 포함되어 있다.(클릭하면 해당 리스트로 이동합니다)

댓글 없음:

댓글 쓰기