플레임 그래프
플레임 그래프 (Flame graphs)
플레임 그래프(flame graph)는 프로파일 데이터의 시각적 요약을 제공해요. 계층적 데이터(예: 스택 트레이스, 파일시스템 내용)에 메트릭(일반적으로 리소스 사용)을 붙인 완전한 시각화예요. 지속적 프로파일링의 근본적인 측면으로, 성능 데이터를 편리하게 시각화하는 방법이에요.
출처: 문서
본문
플레임 그래프는 프로파일 데이터의 시각적 요약을 제공해요. 플레임 그래프는 스택 트레이스, 파일시스템 내용 같은 계층적 데이터를 메트릭(일반적으로 리소스 사용)과 함께 완전히 시각화한 것이에요.
지속적 프로파일링의 근본적인 측면은 플레임 그래프로, 성능 데이터를 시각화하는 편리한 방법이에요. 이 그래프들은 애플리케이션 내 리소스 할당과 병목에 대한 명확하고 직관적인 이해를 제공해요.
플레임 그래프의 창시자인 Brendan Gregg은 성능 문제를 디버깅하기 위해 일반 프로파일러로 스택 트레이스를 보고, 읽고, 이해할 수 없는 것에서 영감을 얻었어요.
Pyroscope가 플레임 그래프를 만드는 방법 (How Pyroscope creates flame graphs)
이 다이어그램은 코드가 어떻게 플레임 그래프로 변환되는지 보여줘요. 이 경우 Pyroscope는 각 함수에서 얼마나 많은 CPU 사이클이 소비되는지 이해하기 위해 애플리케이션의 스택트레이스를 샘플링해요. 그런 다음 이 데이터를 집계해 플레임 그래프로 변환해요.
플레임 그래프는 무엇을 나타내나요? (What does a flame graph represent?)
수평으로 플레임 그래프는 이 애플리케이션이 실행된 시간의 100%를 나타내요. 각 노드의 너비는 그 함수에서 보낸 시간의 양을 나타내요. 노드가 넓을수록 그 함수에서 더 많은 시간을 보낸 것이고, 노드가 좁을수록 더 적은 시간을 보낸 것이에요.
수직으로 플레임 그래프의 노드는 호출된 함수의 계층과 각 함수에서 보낸 시간을 나타내요. 상단 노드는 루트 노드이며 애플리케이션에서 보낸 총 시간을 나타내요. 그 아래의 노드들은 호출된 함수와 각 함수에서 보낸 시간을 나타내요. 그 아래의 노드들은 그 함수들에서 호출된 함수와 각 함수에서 보낸 시간을 나타내요. 이것은 플레임 그래프의 바닥에 도달할 때까지 계속돼요.
이것은 CPU 프로파일이지만, 프로파일은 메모리, 네트워크, 디스크 등 많은 다른 유형의 리소스를 나타낼 수 있어요.
플레임 그래프 시각화 패널 UI (Flame graph visualization panel UI)
Grafana, Grafana Cloud, Grafana Profiles Drilldown의 플레임 그래프 사용자 인터페이스에 대한 자세한 내용은 Flame graph visualization panel을 참고해요.
Pyroscope UI의 플레임 그래프에 대한 자세한 내용은 Pyroscope UI를 참고해요.