Golang은 고성능 동시 컴파일 언어입니다. 고성능 애플리케이션을 작성할 때 성능 분석이 매우 중요합니다. Golang은 초기 설계에서 이를 고려했지만 실제 생산 환경에서는 성능 분석을 위해 여전히 일부 도구가 필요합니다. 매우 중요한 도구 중 하나는 pprof 입니다.
pprof의 전체 이름은 Performance Profiling이며, Golang에 내장된 성능 분석 도구입니다. pprof는 개발자가 프로그램 실행 시 CPU 사용량, 메모리 사용량 등을 분석하여 프로그램의 성능 병목 현상을 찾는 데 도움을 줍니다.
pprof는 샘플링을 기반으로 작업합니다. pprof는 애플리케이션이 실행될 때 주기적으로 애플리케이션의 CPU 사용량, 메모리 사용량 및 기타 데이터를 수집한 다음 샘플링 파일(.prof 파일)을 생성합니다. 사용자는 이 파일을 사용하여 프로그램 성능을 분석할 수 있습니다.
pprof를 사용하려면 프로그램 코드에 특정 코드 조각을 추가해야 합니다. 이러한 코드 조각은 프로그램이 실행 중일 때 몇 가지 주요 정보를 캡처하고 이 정보를 샘플 파일에 기록합니다. 프로그램이 실행된 후 표준 go 도구 pprof 도구를 사용하여 샘플 파일을 분석할 수 있습니다.
기본 사용 예는 다음과 같습니다.
import ( "net/http" _ "net/http/pprof" ) func main() { go func() { http.ListenAndServe("localhost:6060", nil) }() // 代码片段 }
위 코드에서는 net/http/pprof 패키지를 가져오고 pprof의 요청을 수신하기 위해 기본 함수에서 HTTP 서버를 시작했습니다. 그런 다음 프로그램의 주요 위치에 일부 코드 조각을 삽입합니다. 이러한 코드 조각은 프로그램의 CPU 사용량, 스택 정보 등을 캡처하고 이 정보를 샘플 파일에 기록합니다.
프로그램이 실행된 후 다음 명령을 사용하여 pprof 도구를 시작할 수 있습니다.
go tool pprof [binary] [profile]
여기서 [binary]는 분석해야 하는 바이너리 파일이고 [profile]은 샘플링 파일의 경로입니다. pprof 도구를 시작한 후 top
, web
및 list
와 같은 명령을 사용하여 샘플링 파일의 정보를 볼 수 있습니다. top
、web
、list
等命令来查看采样文件中的信息。
top
命令可以查看程序的 CPU 使用情况和内存占用情况,并按照 CPU 使用率排序:
(pprof) top Showing nodes accounting for 1030ms, 100% of 1030ms total Dropped 105 nodes (cum <= 5.15ms) Showing top 10 nodes out of 21 flat flat% sum% cum cum% 990ms 96.12% 96.12% 990ms 96.12% main.(*myStruct).doWork 20ms 1.94% 98.06% 20ms 1.94% time.Sleep 20ms 1.94% 100.00% 20ms 1.94% fmt.(*buffer).write 0 0% 100.00% 1030ms 100% runtime.main 0 0% 100.00% 1030ms 100% runtime.main.func1 0 0% 100.00% 1030ms 100% runtime.mstart 0 0% 100.00% 1030ms 100% runtime.mstart1 0 0% 100.00% 1030ms 100% runtime.systemstack 0 0% 100.00% 990ms 95.63% main.work 0 0% 100.00% 20ms 1.94% fmt.Fprintf
web
命令可以生成一个交互式的 Web 界面,更直观地展示程序的性能瓶颈:
(pprof) web
list
top
명령은 프로그램의 CPU 사용량과 메모리 사용량을 보고 CPU 사용량별로 정렬할 수 있습니다. (pprof) list myStruct.doWork Total: 1.03s ROUTINE ======================== main.(*myStruct).doWork in /path/to/main.go 990ms 990ms (flat, cum) 96.12% of Total 0 10ms 0.00% runtime.newstack 0 10ms 0.00% runtime.procresize 0 10ms 0.00% runtime.systemstack ...
web
명령은 대화형 웹 인터페이스를 생성할 수 있습니다. 프로그램의 성능 병목 현상을 직관적으로 표시: 🎜rrreee🎜list
명령은 함수의 세부 정보를 보고 함수의 소스 코드와 CPU 사용량을 표시할 수 있습니다. 🎜rrreee🎜pprof는 매우 실용적인 성능입니다. 분석 도구는 개발자가 애플리케이션 성능 병목 현상을 신속하게 찾아 최적화하는 데 도움이 될 수 있습니다. pprof는 고성능 애플리케이션을 작성할 때 없어서는 안 되는 도구입니다. 🎜위 내용은 golang pprof 의미의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!