Profiler
Profiler
Flink 1.19부터 Flink Web UI를 통해 async-profiler로 JobManager/TaskManager 프로세스를 대화형으로 프로파일링할 수 있습니다. 사용자는 임의의 간격과 이벤트 모드(예: ITIMER, CPU, Lock, Wall-Clock, Allocation)로 프로파일링 인스턴스를 생성할 수 있습니다.
출처: 문서
본문
- CPU: 이 모드에서 프로파일러는 Java 메서드, 네이티브 호출, JVM 코드 및 커널 함수를 포함하는 스택 트레이스 샘플을 수집합니다.
- ALLOCATION: 할당 프로파일링 모드에서 모든 호출 트레이스의 최상위 프레임은 할당된 객체의 클래스이고, 카운터는 힙 압력(TLAB에 할당된 크기 또는 TLAB 밖 객체의 총 크기)입니다.
- Wall-clock: Wall-Clock 옵션은 스레드 상태(Running, Sleeping, Blocked)와 관계없이 모든 스레드를 일정 기간마다 동등하게 샘플링하도록 async-profiler에 지시합니다. 예를 들어 애플리케이션 시작 시간을 프로파일링할 때 유용할 수 있습니다.
- Lock: 락 프로파일링 모드에서 최상위 프레임은 락/모니터의 클래스이고, 카운터는 이 락/모니터에 진입하는 데 걸린 나노초 수입니다.
- ITIMER: itimer 프로파일링 모드로 폴백할 수 있습니다. CPU 모드와 유사하지만 perf_events 지원이 필요하지 않습니다. 단점으로 커널 스택 트레이스는 없습니다.
어떤 측정 과정도 본질적으로 측정 대상에 영향을 미칩니다. 프로덕션 환경에 의도하지 않은 영향을 방지하기 위해 Profiler는 현재 옵트인(opt-in) 기능으로 제공됩니다. 활성화하려면 Flink 구성 파일에서
rest.profiling.enabled: true를 설정해야 합니다. 개발 및 사전 프로덕션 환경에서 활성화하는 것을 권장하지만, 프로덕션에서는 실험적 기능으로 취급해야 합니다.
요구사항
Profiler는 Async-profiler로 구동되므로 Async-profiler가 지원하는 플랫폼에서 동작해야 합니다.
| 플랫폼 | 공식 유지 빌드 | 기타 사용 가능한 포트 |
|---|---|---|
| Linux | x64, arm64 | x86, arm32, ppc64le, riscv64, loongarch64 |
| macOS | x64, arm64 |
위에 나열된 것 외의 플랫폼에서 프로파일링하면 Message 열에 오류 메시지와 함께 실패합니다.
사용법
Flink 사용자는 Flink Web UI를 통해 편리하게 프로파일링 제출과 결과 내보내기를 완료할 수 있습니다.
예를 들어,
- 프로파일링할 성능 병목 지점이 있는 TaskManager/JobManager 후보를 찾아 해당 TaskManager/JobManager 페이지(profiler 탭)로 전환합니다.
- Create Profiling Instance 버튼을 클릭하는 것만으로 지정된 시간과 모드로 프로파일링 인스턴스를 제출할 수 있습니다. (해당 모드에 마우스를 올리면 프로파일링 모드 설명이 표시됩니다.)
- 프로파일링 인스턴스가 완료되면 링크를 클릭하여 대화형 HTML 파일을 쉽게 다운로드할 수 있습니다.

Profiling Instance
문제 해결
- CPU 모드 프로파일링 실패: No access to perf events. Try –fdtransfer or –all-user option or 'sysctl kernel.perf_event_paranoid=1'
이는perf_event_open()시스템 호출이 실패했음을 의미합니다. 기본적으로 Docker 컨테이너는perf_event_open시스템 호출에 대한 접근을 제한합니다. 권장 해결책은 ITIMER 프로파일링 모드로 폴백하는 것입니다. CPU 모드와 유사하지만perf_events지원이 필요하지 않습니다. 단점으로 커널 스택 트레이스는 없습니다. - Allocation 모드 프로파일링 실패: No AllocTracer symbols found. Are JDK debug symbols installed?
할당 프로파일링에는 OpenJDK 디버그 심볼이 필요합니다. 자세한 내용은 Installing Debug Symbols을 참조하세요.
더 많은 사례는 async-profiler의 Troubleshooting 페이지를 참조할 수 있습니다.