Optimization


JVMTI (JVM Profiling)

posted Feb 27, 2012, 9:45 PM by Kuwon Kang   [ updated Feb 27, 2012, 9:45 PM ]

JVM기술중 가장 중요한 것중 하나인 JVM Profiling이 있다. JVM 프로파일링은 열어가지 방법을 통해 구현할 수 있다.
아래와 같이 3가지의 방법이 존재하지만 그에 대한 특징과 장점을 알아본다.

JVM이 제공하는 가장 기본적인 기술중에 정의된 스팩이 바로 JVMPI다음에 나온 JVMTI(Java Virtual Machine Tool Interface)기술이다.
JVMPI는 실험적으로 만들어진 스팩이긴 하나 많은 개발자들로부터 사용되어지고 있고 이를 기반으로한 상용 툴도 존재한다.

JVMTI는 SDK 1.5부터 제공된 기술이고 JVMPI(Java Virtual Machine Profiling Interface)를 대체한다.
JVMTI는 JVMPI의 여러가지 요소들에 대한 향상과 강력한 인터페이스를 제공한다.

JVMTI는  자바 어플리케이셔의 디버깅과 프로파일링에 유용한데 이벤트와 통지를 인터페이스로 등록하고 이를 전달받아 필요한 정보를 수집하게 된다.

또한 JVMTI를 통해 메모리 할당, CPU 점유, Lock contention등의 정보를 획득할 수 있다.

JVMTI는 각각의 JVM내부 이벤트에 대한 Callback을 통해 처리하므로 보다 효과적인 성능 집계를 할 수 있다.
JVMTI는 JVMPI 보다 4배나 많은 다양한 API를 제공한다.
다양한 이벤트 타입을 제공한다(Exception, Field Access, modification event, breakpoint, single-step event).
JVMPI에서 제공하는 다양한 API들은 성능이슈가 매우 많다. 그러나 JVMTI는 이를 모두 극복하고 최적화된 정보를 제공한다.
  • java.lang.instrument (-javaagent)
    • Bytecode Instrumentation은 JVM의 내부 정보(CPU, Memory, Object Allocation, Thread등)외에 사용자 어플리케이션의 성능, 호출 스택등을 실제 성능의 영향없이 분석하는 경우 많이 사용 된다.
    • 메서드의 시작이나 완료 이벤트시점을 찾거나 집계하는 경우에도 사용된다.
    • 이 기술은 실제 Class파일의 Bytecode를 수정하는 방식을 사용하게 된다.
    • 수정 방식은 크게 3가지로 분류된다.
      • Static Instrumentation: JVM이 로드되기전에 수정하는 방식.
      • Load-Time Instrumentation: Class 파일이 로드될 떄 실제 Raw Bytes를 에이전트에 보내어 클래스를 변경하는 방식.
      • Dynamic Instrumentation: 이는 이미 로드된 Class를 RedefineClasses 함수를 통해 여러번 수정할 수 있는 방식이다.
  • jvmti (-agentlib/-agentpath)
    • Native 방식의 JVM Profiling  기술이다.
    • Java agent방식보다 훨씬 강력한 정보들을 획득할 수 있다.
    • JVMTI Interface 제공하는 다양한 API를 사용할 수 있다.


How to analyze

posted Jun 13, 2011, 5:18 PM by Kuwon Kang   [ updated Jun 13, 2011, 5:34 PM ]

System, Application을 최적화 하기 위해서는 몇 가지 분석 접근 방식과 기법이 필요합니다.

또한 OS, Platform, Language등에 따라 적절한 기술과 경험등을 사용하여 가장 빠른 시간안에 문제점을 파악하고 해결해야 합니다.

그 요소로는 CPU, Disk, Thread, Process, Memory, Network, Database등과 같은 매우 다양한 요소등을 고려해야 합니다.



1-2 of 2

Comments