Flame 그래프 필터링

Cloud Profiler를 사용하면 필터를 추가하여 선택한 프로필의 정보가 표시되는 방식을 제어할 수 있습니다. 예를 들어 특정 프레임 또는 호출 스택을 숨기는 필터를 추가할 수 있습니다. 필터를 추가하거나 삭제해도 선택한 프로필 집합은 변경되지 않습니다.

각 필터는 사용자 정의된 VALUE와 쌍을 이루는 사전 정의된 FILTER-OPTION으로 지정됩니다.

[FILTER-OPTION] : [VALUE]

추가한 각 필터가 필터 표시줄에 표시됩니다. 이 예시에서는 Metric : Bytes를 표시하는 필터 하나가 있습니다.

측정항목 옵션과 바이트 값이 있는 필터 표시

Profiler는 선택한 프로필 유형을 기반으로 MetricFILTER-OPTIONVALUE를 사용하여 필터를 자동으로 만듭니다. 일부 프로필 유형의 VALUE를 변경할 수 있습니다. 이 필터를 삭제할 수 없습니다.

필터를 추가하려면 다음 방법 중 하나를 사용합니다.

  • 필터 를 클릭하고 목록에서 옵션을 선택한 후 값을 입력합니다.
  • 필터 표시줄에서 프로필 데이터 필터 추가라는 회색 텍스트를 클릭한 후 필터 옵션과 값을 입력합니다.
  • 포커스, 프레임에서 표시, 스택 표시 필터 옵션의 경우 프레임 위에 마우스 포인터를 놓은 후 프레임 도움말에서 옵션을 선택할 수도 있습니다.

필터를 삭제하려면 필터에서 닫기 를 클릭합니다.

표시할 데이터를 준비할 때 Profiler가 프레임과 필터 간 일치 항목을 검색합니다. 일치 항목이 발견되면 Profiler는 FILTER-OPTION을 사용하여 실행할 작업을 결정합니다. 프레임 함수 이름 또는 함수 소스 파일 이름에 VALUE가 포함되면 프레임이 필터와 일치합니다. 대소문자를 구분하는 비교가 수행됩니다. 예를 들어 필터가 Hide frames : oo이면 foo, foo1, busyloop 일치 함수가 있는 프레임이 Flame 그래프에서 숨겨집니다.

측정항목

프로필 유형 집계 모드를 설정하려면 측정항목 필터를 사용하세요. 예를 들어 프로필 유형을 선택할 경우 데이터를 바이트객체로 시각화할 수 있습니다.

측정항목 필터에 선택할 수 있는 항목은 프로그래밍 언어 및 선택한 프로필 유형에 따라 다릅니다.

  • CPU 시간 프로필의 경우 CPU 시간만 선택할 수 있습니다.
  • 프로필의 선택 항목은 다음과 같습니다.

    • 바이트
    • 객체
  • 할당된 힙 프로필의 선택 항목은 다음과 같습니다.

    • 총 할당 바이트
    • 총 할당 객체
  • 실제 경과 시간 프로필의 선택 항목은 다음과 같습니다.

    • 개수
    • 실제 경과 시간
  • 스레드 프로필의 경우 Goroutine만 선택할 수 있습니다.

  • 경합 프로필의 선택 항목은 다음과 같습니다.

    • 지연
    • 경합

프로파일링 측정항목 유형에 대한 자세한 내용은 프로파일링 개념을 참조하세요.

예를 들어 다음 스크린샷은 프로그램의 CPU 소비를 보여줍니다.

CPU 사용량에 대한 Profiler 그래프

여기에서는 busyloop 루틴이 foo1foo2를 호출합니다. 두 함수 모두 다양한 루틴을 호출하는 것을 알 수 있습니다. 원하는 데이터만 표시되도록 필터를 추가하여 그래프를 추가로 제한할 수 있습니다.

포커스

포커스 필터를 사용할 때 함수 하나를 선택하면 Flame 그래프에는 특정 함수를 드나드는 코드 경로가 표시됩니다.

그래프의 포커스를 지정하고 결과를 해석하는 방법에 대한 자세한 내용은 Flame 그래프 포커스 지정을 참조하세요.

스택 표시

필터 값과 일치하는 프레임을 포함하는 모든 호출 스택을 표시하고 다른 모든 호출 스택을 숨기려면 스택 표시 필터를 사용하세요. 그래프에 함수의 호출자와 피호출자, 즉 일치하는 함수를 호출하는 모든 항목과 해당 함수가 호출하는 모든 항목이 표시됩니다.

이 필터는 대소문자를 구분하는 하위 문자열 테스트를 수행합니다. 프레임 함수에 필터 값이 포함되면 일치가 발생합니다.

이전 예시의 CPU 사용량 그래프를 foo1 함수와 관련된 호출 스택만 표시하도록 제한하려면 foo1스택 표시 필터를 설정합니다.

스택 표시 필터가 적용된 CPU 사용량에 대한 Profiler 그래프

스택 숨기기

필터 값과 일치하는 프레임을 포함하는 모든 호출 스택을 숨깁니다. 이 필터는 관심 없는 스택을 숨기려는 경우에 유용합니다. 예를 들어 자바 애플리케이션에서는 일반적으로 Hide stacks: unsafe.park 필터를 추가합니다.

이 필터는 대소문자를 구분하는 하위 문자열 테스트를 수행합니다. 프레임 함수에 필터 값이 포함되면 일치가 발생합니다.

프레임에서 표시

필터 값과 일치하는 프레임에서 시작되는 모든 호출 스택을 표시하고 다른 모든 호출 스택을 숨기려면 프레임에서 표시 필터를 사용하세요. 결과 그래프에 명명된 함수의 호출 스택이 표시됩니다. 이 필터는 함수가 여러 곳에서 호출되고 이 함수에 대한 총 소비량을 확인하려는 경우에 유용합니다.

예를 들어 baz 함수에서 시작된 호출만 표시하려면 baz프레임에서 표시 필터를 설정합니다.

프레임에서 표시 필터가 적용된 CPU 사용량에 대한 Profiler 그래프

이 필터는 대소문자를 구분하는 하위 문자열 테스트를 수행합니다. 프레임 함수에 필터 값이 포함되면 일치가 발생합니다.

프레임 숨기기

필터 값과 일치하는 모든 프레임을 숨기려면 프레임 숨기기 필터를 사용합니다. 그래프에 함수의 호출자가 표시되고 함수의 모든 피호출자가 집계됩니다. 이 필터는 그래프에서 관련 없는 프레임을 삭제하는 데 유용합니다.

예를 들어 foo1foo2의 프레임을 모두 숨기려면 foo프레임 숨기기 필터를 설정합니다. foo1foo2가 모두 일치하므로 둘 다 그래프에서 삭제됩니다. 둘 다 bar 루틴과 baz 루틴을 호출하므로 이들 함수 각각의 데이터가 집계됩니다.

프레임 숨기기 필터가 적용된 CPU 사용량에 대한 Profiler 그래프

이 필터는 대소문자를 구분하는 하위 문자열 테스트를 수행합니다. 프레임 함수에 필터 값이 포함되면 일치가 발생합니다.

강조표시

함수 이름이 필터 값과 일치하는 모든 프레임을 강조표시하려면 강조표시 필터를 사용합니다. 함수는 일반 색상 모드로 유지되지만 호출 시퀀스는 더 옅은 색상으로 표시됩니다.

예를 들어 강조표시가 없는 그래프는 다음과 같습니다.

강조표시가 없는 프로파일링 그래프

다음은 같은 그래프에서 baz 함수에 강조표시가 요청된 경우입니다.

강조표시가 있는 프로파일링 그래프

이 필터는 대소문자를 구분하는 하위 문자열 테스트를 수행합니다. 프레임 함수에 필터 값이 포함되면 일치가 발생합니다.

색상 모드

기본적으로 프레임 색상은 함수의 패키지에 해당합니다(가능한 경우). 패키지 정보를 볼 수 없는 경우 Node.js와 마찬가지로 소스 파일의 이름을 사용하여 함수 블록의 색상을 지정합니다. 기본 설정이 적용된 상태에서 호출 스택 프레임 색상의 변경은 한 패키지에서 다른 패키지로의 전환을 의미합니다. 기본 옵션은 이름 값이 적용된 색상 모드 필터에 해당합니다.

함수와 그 하위 요소의 소비량을 기준으로 Flame 그래프의 프레임에 색상을 지정하려면 합계 값이 적용된 색상 모드 필터를 추가합니다. 함수가 여러 호출 스택을 통해 호출되면 모든 호출 스택의 측정항목 소비량별로 색상이 결정됩니다. 예를 들어 mainbusyloop는 빨간색으로 표시됩니다. 이 두 프레임은 대부분의 CPU 시간을 소비합니다. foo2baz 프레임은 진한 주황색이고, foo1 프레임은 더 연한 주황색입니다. barload의 프레임이 가장 밝습니다. 다음 Flame 그래프는 foo2foo1보다 CPU 시간을 많이 소비하지만 busyloop보다는 적게 소비함을 보여줍니다.

색상 모드 합계

함수의 측정항목 소비량을 기준으로 Flame 그래프의 프레임에 색상을 지정하되 하위 요소의 측정항목 소비량을 제외하려면 자체 값이 적용된 색상 모드 필터를 추가합니다. 예를 들어 다음 필터는 baz 함수가 다른 어떠한 함수보다 더 많은 CPU 시간을 소비함을 보여줍니다.

색상 모드 자체

다음 단계