Hadoop용 Async Profiler Servlet
Hadoop용 Async Profiler Servlet
이 문서는 Hadoop 애플리케이션에서 async profiler를 구성하고 사용하는 방법을 설명해요. Async profiler는 Safepoint bias 문제가 없는 Java용 저오버헤드 샘플링 프로파일러예요. 스택 트레이스를 수집하고 메모리 할당을 추적하기 위한 HotSpot 특유의 API를 특징으로 해요.
출처: 문서
본문
목적 (Purpose)
이 문서는 Hadoop 애플리케이션에서 async profiler를 구성하고 사용하는 방법을 설명해요. Async profiler는 Safepoint bias 문제가 없는 Java용 저오버헤드 샘플링 프로파일러예요. 스택 트레이스를 수집하고 메모리 할당을 추적하기 위한 HotSpot 특유의 API를 특징으로 해요. 프로파일러는 OpenJDK, Oracle JDK 및 HotSpot JVM 기반의 다른 Java 런타임에서 동작해요. Hadoop profiler servlet은 Async Profiler major 버전 1.x와 2.x를 지원해요.
전제 조건 (Prerequisites)
- Hadoop이 올바르게 설치·구성·설정되어 있는지 확인해요. 자세한 내용은: 처음 사용자를 위한 Single Node Setup, 대규모 분산 클러스터를 위한 Cluster Setup.
- https://github.com/jvm-profiling-tools/async-profiler 로 이동해 플랫폼에 적합한 릴리스를 다운로드하고 모든 클러스터 호스트에 설치해요.
- 환경 변수에
ASYNC_PROFILER_HOME을 설정해요 (hadoop-env.sh에 넣어요). async-profiler 설치 위치의 루트 디렉터리로 설정하며, 또는 Hadoop 데몬의 명령줄에 시스템 속성으로-Dasync.profiler.home=/path/to/async-profiler처럼 전달해요.
사용법 (Usage)
전제 조건이 충족되면 Namenode 또는 ResourceManager UI를 사용해 async-profiler에 접근할 수 있어요. async-profiler의 다음 옵션을 쿼리 파라미터로 지정할 수 있어요:
-e event: 프로파일링 이벤트:cpu|alloc|lock|cache-misses등-d duration: 'duration' 초 동안 프로파일링 실행 (정수)-i interval: 샘플링 간격 (나노초, long)-j jstackdepth: 최대 Java 스택 깊이 (정수)-b bufsize: 프레임 버퍼 크기 (long)-t: 서로 다른 스레드를 별도로 프로파일링-s: FQN 대신 단순 클래스 이름 사용-o fmt[,fmt...]: 출력 형식:summary|traces|flat|collapsed|svg|tree|jfr|html--width px: SVG 너비 픽셀 (정수)--height px: SVG 프레임 높이 픽셀 (정수)--minwidth px: px보다 작은 프레임 건너뛰기 (double)--reverse: 역방향 스택의 FlameGraph / Call tree 생성
예: Namenode http 주소가 localhost:9870이고 ResourceManager http 주소가 localhost:8088이라면, async-profiler가 설정된 ProfileServlet은 Namenode와 ResourceManager 프로세스에 대해 각각 http://localhost:9870/prof와 http://localhost:8088/prof로 접근할 수 있어요.
일부 파라미터에 대해 자세히:
현재 프로세스의 10초 CPU 프로파일을 수집하려면 (FlameGraph svg 반환):
curl http://localhost:9870/prof # Namenode용 FlameGraph svg
curl http://localhost:8088/prof # ResourceManager용 FlameGraph svg
pid 12345의 10초 CPU 프로파일을 수집하려면 (FlameGraph svg 반환):
curl http://localhost:9870/prof?pid=12345 # 예: 여기에 Datanode의 pid 제공
pid 12345의 30초 CPU 프로파일을 수집하려면 (FlameGraph svg 반환):
curl http://localhost:9870/prof?pid=12345&duration=30
현재 프로세스의 1분 CPU 프로파일을 tree 형식으로 수집하려면 (html):
curl http://localhost:9870/prof?output=tree&duration=60
현재 프로세스의 10초 힙 할당 프로파일을 수집하려면 (FlameGraph svg 반환):
curl http://localhost:9870/prof?event=alloc
현재 프로세스의 락 경합(lock contention) 프로파일을 수집하려면 (FlameGraph svg 반환):
curl http://localhost:9870/prof?event=lock
더 알아보기 (Learn more)
- 원문: 문서