앱 성능 측정
이 문서에서는 Cloud Profiler를 설정 및 사용하는 방법을 설명합니다. 샘플 Go 프로그램을 다운로드하고 프로파일링을 사용 설정한 상태에서 실행한 후 Profiler 인터페이스를 사용하여 캡처된 데이터를 탐색합니다.
시작하기 전에
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Enable the required API.
- Cloud Shell을 열려면 Google Cloud Console 툴바에서 Cloud Shell 활성화를 클릭합니다.
잠시 후 Google Cloud Console에서 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 그래프를 제공합니다.
시간 컨트롤 외에도 사용할 프로필 데이터 집합을 선택할 수 있는 옵션이 있습니다. 여러 애플리케이션을 프로파일링할 경우, 서비스를 사용하여 프로파일링 대상 데이터의 원본을 선택합니다. 프로필 유형은 표시할 프로필 데이터의 종류를 선택하는 데 사용됩니다. 영역 이름과 버전은 Compute Engine 영역 또는 애플리케이션 버전의 데이터 표시를 제한하는 데 사용됩니다. 가중치는 리소스 사용이 가장 많은 기간 중에 캡처된 프로필을 선택하는 데 사용됩니다.
필터를 추가하면 Flame 그래프에 분석할 프로필이 표시되는 방식을 세분화할 수 있습니다. 앞의 스크린샷에서는 필터 표시줄 filter_list에 필터 한 개가 있습니다. 이 필터 옵션은 Metric
이고 필터 값은 CPU time
입니다.
데이터 탐색
Flame 그래프에는 프로그램의 호출 스택이 표시됩니다. Flame 그래프에는 각 함수가 프레임으로 표시됩니다. 프레임 너비는 함수의 리소스 소비율을 나타냅니다. 상단 프레임은 전체 프로그램을 나타냅니다. 이 프레임에는 리소스 소비율이 항상 100%로 표시됩니다. 또한 이 프레임에는 이 그래프에서 평균을 구하는 데 사용된 프로필 수가 나와 있습니다.
샘플 프로그램에는 복잡한 호출 스택 집합이 없습니다. 앞의 스크린샷에는 5개의 프레임이 있습니다.
- 회색 프레임은 리소스 소비율 100%를 차지하는 전체 실행 파일을 나타냅니다.
- 녹색
main
프레임은 Goruntime.main
입니다. - 주황색
main
프레임은 샘플 프로그램의main
루틴입니다. - 주황색
busyloop
프레임은 샘플의main
에서 호출되는 루틴입니다. - 주황색
main.load
프레임은 샘플의main
에서 호출되는 루틴입니다.
필터 선택기를 사용하면 일부 이름과 일치하는 함수를 필터링하는 등의 작업을 수행할 수 있습니다. 예를 들어 유틸리티 함수의 표준 라이브러리가 있는 경우 이를 그래프에서 삭제할 수 있습니다. 특정 메서드에서 시작된 호출 스택을 삭제하거나 다른 방식으로 그래프를 단순화할 수도 있습니다.
main.go
애플리케이션은 단순하므로 필터링할 필요가 없습니다.
간단한 애플리케이션이라도 필터를 사용하면 관심 없는 프레임을 숨겨 원하는 프레임을 보다 명확하게 볼 수 있습니다. 예를 들어 샘플 코드의 프로파일링 스크린샷에서 회색 프레임은 그 아래에 있는 첫 번째 main
프레임보다 약간 큽니다. 왜일까요? 이와 같은 main
호출 스택의 압도적인 리소스 소비율로 인해 즉각적으로 확인할 수 없는 다른 상황이 있는 것일까요?
애플리케이션의 main
루틴 외부에서 발생하는 소비를 보려면 main
루틴의 호출 스택을 숨기는 필터를 추가합니다.
리소스 소비의 0.227%만 main
외부에서 발생합니다.
필터링 및 기타 프로파일링 데이터 탐색 방법에 대한 자세한 내용은 분석할 프로필 선택을 참조하세요.
다음 단계
프로파일링에 대한 일반 정보는 다음 문서를 참조하세요.
- Cloud Profiler 개요
- 프로파일링 개념
- DevOps 관련 리소스를 읽고 DORA의 연구 프로그램을 살펴보세요.
- Go 애플리케이션 프로파일링
- 자바 애플리케이션 프로파일링
- Node.js 애플리케이션 프로파일링
- Python 애플리케이션 프로파일링
- Google Cloud 외부에서 실행되는 애플리케이션 프로파일링