Flame 그래프와 상호작용

Cloud Profiler는 Flame 그래프를 사용하여 프로파일링 데이터를 표시합니다. 개념 설명은 Flame 그래프를 참조하세요.

Flame 그래프는 프레임으로 구성됩니다. 각 프레임은 서비스의 함수를 나타냅니다.

  • 프레임 너비는 분석 대상 측정항목의 소비량에 해당합니다. 예를 들어 상단 프레임은 전체 서비스를 나타내며 분석 대상 측정항목 소비량이 100%입니다. 따라서 이 프레임은 전체 너비로 표시됩니다.

  • 기본적으로 프레임 색상은 함수의 패키지에 해당합니다(가능한 경우). 패키지 정보를 볼 수 없는 경우 Node.js와 마찬가지로 소스 파일의 이름을 사용하여 함수 블록의 색상을 지정합니다. 호출 스택에서 블록 색상의 변경은 한 패키지에서 다른 패키지로의 전환을 의미합니다. 프레임 색상이 지정되는 방식을 변경할 수 있습니다. 자세한 내용은 색상 모드를 참조하세요.

플레임 그래프에는 하나 이상의 호출 스택과 프로필 집합의 평균 값이 표시됩니다.

  • 각 개별 프로필은 단일 Compute Engine 영역(zone)에 구성된 서비스의 단일 인스턴스에서 1분당 한 번 수집되는 데이터를 나타냅니다. 프로필의 수집 기간은 프로필 유형에 따라 다릅니다. 자세한 내용은 프로필 컬렉션을 참조하세요.
  • 최대 250개 프로필의 평균 값이 표시됩니다. 250개 이상의 프로필을 사용할 수 있다면 이 중 무작위로 250개가 샘플 집합으로 선택됩니다.
  • 플레임 그래프의 상단 프레임 또는 '루트'는 전체 서비스를 나타냅니다. '루트' 프레임 아래에는 그래프의 두 번째 행을 구성하는 다른 프레임 또는 프레임 집합이 있습니다. 이처럼 색상으로 구분된 각 프레임은 서비스가 수행하는 최상위 수준의 호출입니다. 색상으로 구분된 각 함수 프레임 아래에는 또 다른 함수 프레임 집합이 있고, 각 프레임 집합은 상위 프레임의 일부 리소스를 담당합니다. 그래프에서 함수 프레임의 계층 구조는 호출 순서를 나타내며 프레임 너비는 함수 또는 메서드의 리소스 소비량을 나타냅니다.

예를 들어 docdemo-service에 소비된 힙의 프로파일러 그래프는 서비스가 서로 다른 최상위 프레임을 호출함을 보여주며, 그 중 하나는 Go 런타임의 main 함수입니다. 이러한 최상위 프레임의 너비를 보면 Go 런타임의 main, 애플리케이션별 main, allocOnce, allocImpl과 관련된 호출 스택이 힙 대부분을 소비하는 것을 알 수 있습니다.

힙 소비량에 대한 Profiler 그래프

루트 프레임에는 측정항목 소비 정보가 표시됩니다.

프레임에 마우스 가져가기

Flame 그래프의 프레임 위에 마우스 포인터를 가져가면 프레임에 대한 추가 정보를 보여주는 프레임 도움말이 열립니다.

  • 함수 이름
  • 함수 파일 이름
  • 절대적 사용량 및 사용량 백분율

측정항목 소비 정보에서 total이라는 프리픽스는 함수와 그 하위 요소의 측정항목 값과 백분율을 나타냅니다. 이와 반대로 self 프리픽스는 함수의 하위 요소 소비량을 제외한 함수 자체의 측정항목 값과 백분율을 나타냅니다.

또한 대화상자에는 다음 버튼이 포함됩니다.

  • 포커스: 그래프를 현재 프레임의 함수에 포커스를 맞춥니다.
  • 스택 표시: 이 프레임의 함수가 포함된 스택만 표시하는 필터를 추가합니다.
  • 기록 표시: 프레임의 함수의 기록 뷰를 엽니다.

이 예시에서 도움말은 runtime.main 함수가 /usr/local/go/src/runtime/proc.go 파일에 있음을 보여줍니다. 측정항목 소비 정보를 보면 runtime.main 및 그 하위 요소가 메모리 54.73MiB 또는 프로그램에서 소비하는 총 메모리의 약 98%를 소비하고 있음을 알 수 있습니다.

runtime.main의 측정항목 소비

프레임 선택

프레임을 선택하면 선택한 프레임이 전체 너비로 표시된 Flame 그래프가 다시 그려지고 호출 스택에서 더 높은 색상이 숨겨집니다. 프레임을 선택해도 설정이 변경되지 않으며 그래프가 표시되는 방식만 변경됩니다. 원래 뷰로 되돌리려면 루트(상단) 프레임을 선택합니다.

다음 예시에서는 포인터가 작은 프레임에 있어 호출 스택을 보기 어렵습니다. 이 도움말에서는 (*huffmanBitWriter).write를 프레임 함수로 간주합니다.

Flame 그래프의 작은 프레임

프레임을 선택하면 그래프가 다시 그려지므로 호출 스택이 더 잘 보이게 됩니다.

확장된 작은 프레임

다음 단계