Profiler 서블릿
Profiler 서블릿
이 문서는 HBase에 내장된 Profiler 서블릿을 소개해요. Async Profiler 프로젝트를 통해 필요할 때(on-demand) 통합 프로파일링을 할 수 있게 해 주는 서블릿이에요. 클러스터에서 CPU, 메모리 할당, 락 경합 같은 정보를 수집하고 싶을 때 유용해요.
출처: 문서
본문
배경
HBASE-21926에서 Async Profiler 프로젝트를 통한 통합 온디맨드 프로파일링을 지원하는 새로운 서블릿이 도입됐어요.
사전 준비
Async Profiler 홈페이지로 가서 자신의 플랫폼에 맞는 릴리스를 다운로드하고, 모든 클러스터 호스트에 설치해요. Linux 커널 v4.6 이상을 사용한다면 Basic Usage 섹션에 따라 proc 변수를 반드시 설정해야 해요. 그렇게 하지 않으면 플레임 그래프에 내용이 전혀 표시되지 않으니 주의하세요.
환경 변수 ASYNC_PROFILER_HOME을 async-profiler 설치 위치의 루트 디렉터리로 설정하거나(hbase-env.sh에 넣으면 돼요), HBase 데몬의 명령줄에서 시스템 프로퍼티로 -Dasync.profiler.home=/path/to/async-profiler처럼 전달하면 돼요.
사용법
사전 준비가 끝나면 HBase UI 또는 infoserver와의 직접 상호작용을 통해 async-profiler에 접근할 수 있어요.
예시:
- 현재 프로세스의 30초 CPU 프로필 수집(FlameGraph svg 반환)
curl http://localhost:16030/prof - 현재 프로세스의 1분 CPU 프로필을 트리 형식(html)으로 수집
curl http://localhost:16030/prof?output=tree&duration=60 - 현재 프로세스의 30초 힙 할당 프로필 수집(FlameGraph svg 반환)
curl http://localhost:16030/prof?event=alloc - 현재 프로세스의 락 경합 프로필 수집(FlameGraph svg 반환)
curl http://localhost:16030/prof?event=lock
async-profiler가 지원하는 이벤트 타입은 다음과 같아요. event 파라미터로 지정하고, 기본값은 cpu예요. 모든 운영체제가 모든 타입을 지원하는 것은 아니에요.
Perf 이벤트:
- cpu
- page-faults
- context-switches
- cycles
- instructions
- cache-references
- cache-misses
- branches
- branch-misses
- bus-cycles
- L1-dcache-load-misses
- LLC-load-misses
- dTLB-load-misses
Java 이벤트:
- alloc
- lock
지원되는 출력 형식은 다음과 같아요. output 파라미터로 지정하고, 기본값은 flamegraph예요.
출력 형식:
- summary: 기본 프로파일링 통계 덤프.
- traces: 콜 트레이스.
- flat: 플랫 프로필(상위 N 핫 메서드).
- collapsed: FlameGraph 스크립트에서 쓰는 형식의 축약된 콜 트레이스. 콜 스택 모음으로, 각 줄은 세미콜론으로 구분된 프레임 목록과 그 뒤에 오는 카운터로 구성돼요.
- svg: SVG 형식의 FlameGraph.
- tree: HTML 형식의 콜 트리.
- jfr: Java Flight Recorder 형식의 콜 트레이스.
duration 파라미터는 출력을 생성하기 전에 트레이스 데이터를 수집할 시간(초)을 지정해요. 기본값은 10초예요.
UI
UI의 상단 메뉴에 'Profiler' 항목이 새로 생겨요. 이 항목은 기본 동작을 실행하는데, 로컬 프로세스의 CPU 사용량을 30초 동안 프로파일링한 후 FlameGraph SVG 출력을 만드는 동작이에요.
참고
쿼리 파라미터 pid를 사용하면 프로파일링할 특정 프로세스의 프로세스 ID를 지정할 수 있어요. 이 파라미터가 없으면 infoserver가 내장된 로컬 프로세스를 프로파일링해요. JVM이 아닌 프로파일링 대상도 작동할 수 있지만 특별히 지원되지는 않아요. 보안 영향이 있으므로 infoserver에 대한 접근은 적절히 제한해야 해요.