앱 성능 측정

이 문서에서는 Cloud Profiler를 설정 및 사용하는 방법을 설명합니다. 샘플 Go 프로그램을 다운로드하고 프로파일링을 사용 설정한 상태에서 실행한 후 Profiler 인터페이스를 사용하여 캡처된 데이터를 탐색합니다.

시작하기 전에

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  4. Enable the required API.

    Enable the API

  5. Cloud Shell을 열려면 Google Cloud Console 툴바에서 Cloud Shell 활성화를 클릭합니다.

    Cloud Shell 활성화

    잠시 후 Google Cloud Console에서 Cloud Shell 세션이 열립니다.

    Cloud Shell 세션

프로파일링할 프로그램 가져오기

샘플 프로그램 main.go는 GitHub의 golang-samples 저장소에 있습니다. 이를 가져오려면 Go 샘플 패키지를 검색합니다.

git clone https://github.com/GoogleCloudPlatform/golang-samples.git

잠시 후 패키지 검색이 완료됩니다.

코드 프로파일링

검색된 패키지에서 Profiler용 샘플 코드 디렉터리로 이동합니다.

cd golang-samples/profiler/profiler_quickstart

main.go 프로그램은 CPU 사용량이 많은 워크로드를 만들어 데이터를 프로파일러에 제공합니다. 이 프로그램을 시작하고 실행 중인 상태로 둡니다.

 go run main.go

이 프로그램은 실행 시 CPU를 로드하도록 설계되었습니다. 실행 시 프로그램에서 프로파일링 데이터를 수집하고 정기적으로 저장하는 Profiler를 사용하도록 구성되었습니다.

이 프로그램을 시작하면 몇 초 후 profiler has started 메시지가 표시됩니다. 약 1분 후에 메시지 두 개가 추가로 표시됩니다.

 successfully created profile CPU
 start uploading profile

이 메시지는 프로필이 생성되어 Cloud Storage 프로젝트에 업로드되었음을 나타냅니다. 프로그램이 실행되는 동안 마지막 메시지 두 개가 1분에 한 개씩 계속 표시됩니다.

서비스를 시작한 후 권한 거부 오류 메시지가 표시되는 경우 Google Cloud 프로젝트 구성 오류를 참조하세요.

Profiler 인터페이스

애플리케이션을 시작하고 잠시 후에 초기 프로필 데이터가 Profiler에 표시됩니다. 이 인터페이스는 프로파일링 데이터를 탐색하는 데 필요한 컨트롤 배열과 Flame 그래프를 제공합니다.

샘플 코드를 사용한 Profiler 인터페이스

시간 컨트롤 외에도 사용할 프로필 데이터 집합을 선택할 수 있는 옵션이 있습니다. 여러 애플리케이션을 프로파일링할 경우, 서비스를 사용하여 프로파일링 대상 데이터의 원본을 선택합니다. 프로필 유형은 표시할 프로필 데이터의 종류를 선택하는 데 사용됩니다. 영역 이름버전Compute Engine 영역 또는 애플리케이션 버전의 데이터 표시를 제한하는 데 사용됩니다. 가중치는 리소스 사용이 가장 많은 기간 중에 캡처된 프로필을 선택하는 데 사용됩니다.

필터를 추가하면 Flame 그래프에 분석할 프로필이 표시되는 방식을 세분화할 수 있습니다. 앞의 스크린샷에서는 필터 표시줄 에 필터 한 개가 있습니다. 이 필터 옵션은 Metric이고 필터 값은 CPU time입니다.

데이터 탐색

Flame 그래프에는 프로그램의 호출 스택이 표시됩니다. Flame 그래프에는 각 함수가 프레임으로 표시됩니다. 프레임 너비는 함수의 리소스 소비율을 나타냅니다. 상단 프레임은 전체 프로그램을 나타냅니다. 이 프레임에는 리소스 소비율이 항상 100%로 표시됩니다. 또한 이 프레임에는 이 그래프에서 평균을 구하는 데 사용된 프로필 수가 나와 있습니다.

샘플 프로그램에는 복잡한 호출 스택 집합이 없습니다. 앞의 스크린샷에는 5개의 프레임이 있습니다.

  • 회색 프레임은 리소스 소비율 100%를 차지하는 전체 실행 파일을 나타냅니다.
  • 녹색 main 프레임은 Go runtime.main입니다.
  • 주황색 main 프레임은 샘플 프로그램의 main 루틴입니다.
  • 주황색 busyloop 프레임은 샘플의 main에서 호출되는 루틴입니다.
  • 주황색 main.load 프레임은 샘플의 main에서 호출되는 루틴입니다.

필터 선택기를 사용하면 일부 이름과 일치하는 함수를 필터링하는 등의 작업을 수행할 수 있습니다. 예를 들어 유틸리티 함수의 표준 라이브러리가 있는 경우 이를 그래프에서 삭제할 수 있습니다. 특정 메서드에서 시작된 호출 스택을 삭제하거나 다른 방식으로 그래프를 단순화할 수도 있습니다. main.go 애플리케이션은 단순하므로 필터링할 필요가 없습니다.

간단한 애플리케이션이라도 필터를 사용하면 관심 없는 프레임을 숨겨 원하는 프레임을 보다 명확하게 볼 수 있습니다. 예를 들어 샘플 코드의 프로파일링 스크린샷에서 회색 프레임은 그 아래에 있는 첫 번째 main 프레임보다 약간 큽니다. 왜일까요? 이와 같은 main 호출 스택의 압도적인 리소스 소비율로 인해 즉각적으로 확인할 수 없는 다른 상황이 있는 것일까요? 애플리케이션의 main 루틴 외부에서 발생하는 소비를 보려면 main 루틴의 호출 스택을 숨기는 필터를 추가합니다. 리소스 소비의 0.227%만 main 외부에서 발생합니다.

샘플 프로그램에서 스택 숨기기

필터링 및 기타 프로파일링 데이터 탐색 방법에 대한 자세한 내용은 분석할 프로필 선택을 참조하세요.

다음 단계

프로파일링에 대한 일반 정보는 다음 문서를 참조하세요.

Cloud Profiler 에이전트 실행 방법에 대한 자세한 내용은 다음을 참조하세요.