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

문제 해결

  1. 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 지원이 필요하지 않습니다. 단점으로 커널 스택 트레이스는 없습니다.
  2. Allocation 모드 프로파일링 실패: No AllocTracer symbols found. Are JDK debug symbols installed?
    할당 프로파일링에는 OpenJDK 디버그 심볼이 필요합니다. 자세한 내용은 Installing Debug Symbols을 참조하세요.

더 많은 사례는 async-profiler의 Troubleshooting 페이지를 참조할 수 있습니다.

더 알아보기 (Learn more)