Flame 그래프
Cloud Profiler는 Flame 그래프를 사용하여 프로파일링 데이터를 표시합니다. 트리 및 그래프와 달리 Flame 그래프는 많은 양의 정보를 작고 읽기 쉬운 형식으로 표시하여 화면 공간을 효율적으로 사용합니다.
Flame 그래프를 설명하기 위해 이 페이지에서는 트리를 Flame 그래프로 변환하는 방법을 보여주고 Flame 그래프의 주요 특징을 간략하게 설명합니다.
Flame 그래프 만들기
트리에서 Flame 그래프를 만들려면 다음 다이어그램에 설명된 단계를 완료합니다.
 
- 함수 호출을 나타내는 화살표를 트리에서 삭제합니다. 
- 각 트리 노드를 프레임으로 바꿉니다. - 프레임 모양은 직사각형이며 모든 프레임의 높이는 동일합니다. 이 페이지의 예시에서는 프레임에 명명된 함수가 사용하는 총 CPU 시간에 따라 프레임 너비가 결정됩니다. - 다음 테이블에는 각 함수의 의사 코드가 설명되어 있습니다. 자체 CPU 시간은 함수 실행 중에 수행된 CPU를 많이 사용하는 작업으로 정의됩니다. - 함수 의사 코드 - 자체 CPU 시간 
 (초)- 총 CPU 시간 
 (초)- func main(): foo1() foo2() // CPU intensive work // for 2 seconds- 2 - 4 + 3 + 2 = 9 - func foo1(): bar() // CPU intensive work // for 1.5 seconds- 1.5 - 2.5 + 1.5 = 4 - func foo2(): bar() // CPU intensive work // for 0.5 seconds- 0.5 - 2.5 + 0.5 = 3 - func bar(): // CPU intensive work // for 2.5 seconds- 2.5 - 2.5 
- 다음 단계로, 호출 시퀀스를 유지하면서 프레임과 왼쪽 맞춤 프레임 사이의 세로 공간을 없앱니다. 원하는 경우 색 구성표를 정의하고 이러한 정의에 따라 프레임 색상을 지정할 수 있습니다. 예를 들어 패키지, 총 CPU 시간, 자체 CPU 시간 또는 다른 측정항목을 기준으로 프레임 색상을 지정할 수 있습니다. - 과도한 공백을 없애고 자체 CPU 시간별로 프레임 색상을 지정한 Flame 그래프는 다음과 같습니다. - 이제 - foo2로 시작하는 호출 스택이- foo1프레임 옆에 있더라도- foo1및- foo2의 호출 스택이 유지된다는 점에 주목하세요.
요약
위의 간단한 예시로 알 수 있는 사항은 다음과 같습니다.
- Flame 그래프는 트리를 간결하게 표현한 그래프로, 위에서 아래로 프레임을 추적하여 호출 스택을 다시 만들 수 있습니다.
- 프레임은 함수이고, 프레임 너비는 함수의 총 CPU 시간을 상대적으로 측정한 값입니다.
이 예시에서는 foo2의 총 CPU 시간이main의 총 CPU 시간의 1/3이므로foo2의 프레임은main의 프레임 너비의 1/3입니다.
- 프레임 아래의 빈 공간 너비는 프레임에서 명명된 함수의 자체 CPU 시간을 상대적으로 측정한 값입니다.
예를 들어 프레임 foo1아래에서 1.5단위가 비어 있고 2.5단위는bar에서 사용됩니다. 따라서foo1의 자체 CPU 시간은 총 CPU 시간의 37.5%(1.5초)입니다.
- 피호출자의 총 CPU 시간은 호출자의 총 CPU 시간을 초과할 수 없으므로 호출 스택을 따라갈수록 프레임 너비가 줄어듭니다. 이에 따라 프레임 모양이 형성됩니다. - 이 예시에서 - foo1은- bar를 호출하고- foo1의 총 CPU 시간은- bar의 총 CPU 시간에- foo1의 자체 CPU 시간을 더한 값으로 정의됩니다. 따라서- bar의 총 CPU 시간은- foo1의 총 CPU 시간보다 길 수 없습니다.