geektutu / blog

极客兔兔的博客,Coding Coding 创建有趣的开源项目。
https://geektutu.com
Apache License 2.0
166 stars 21 forks source link

pprof 性能分析 | Go 语言高性能编程 | 极客兔兔 #106

Open geektutu opened 3 years ago

geektutu commented 3 years ago

https://geektutu.com/post/hpg-pprof.html

Go 语言/golang 高性能编程,Go 语言进阶教程,Go 语言高性能编程(high performance go)。详细介绍如何测试/评估 Go 代码的性能,内容包括使用 testing 库进行基准测试(benchmark),性能分析(profiling) 编译优化(compiler optimisations),内存管理(memory management)和垃圾回收(garbage collect)、pprof 等内容。同时也介绍了使用 Go 语言如何写出高性能的程序和应用,包括不限于 Go 语言标准库、第三方库的使用方式和最佳实践。

callmePicacho commented 3 years ago

总结:

  1. 性能分析类型

    • CPU 性能分析,runtime 每隔 10 ms 中断一次,记录此时正在运行的 goroutines 的堆栈信息
    • 内存性能分析,记录堆内存分配时的堆栈信息,忽略栈内存分配信息,默认每 1000 次采样 1 次
    • 阻塞性能分析,GO 中独有的,记录一个协程等待一个共享资源花费的时间
    • 锁性能分析,记录因为锁竞争导致的等待或延时
  2. CPU 性能分析

    • 使用原生 runtime/pprof 包,通过在 main 函数中添加代码运行可生成性能分析报告:

      pprof.StartCPUProfile(os.Stdout)
      defer pprof.StopCPUProfile()
    • 可通过 go tool pprof -http=:9999 cpu.pprof 在 web 页面查看分析数据

    • 可通过 go tool pprof cpu.prof 交互模式查看分析数据,可使用 help 查看支持的命令和选项

  3. 内存性能分析

    • 使用 pkg/profile 库,通过在 main 函数中添加代码运行可生成性能分析报告:

      defer profile.Start(profile.MemProfile, profile.MemProfileRate(1)).Stop()
    • 同样可通过 web 页面或交互模式查看分析数据

  4. benchmark 生成 profile

    • 可通过在 go test 中添加参数 -cpuprofile=$FILE,-memprofile=$FILE,-blockprofile=$FILE 生成相应的 profile 文件
    • 生成的 profile 文件同样可通过 web 页面或交互模式查看分析数据
dablelv commented 2 years ago

博主,想问下该网站是如何开发或者生成的?

haima96 commented 2 years ago

http://www.graphviz.org/download/

graphviz Windows下载地址,需配置环境变量,重启后生效

YanShulinjj commented 2 years ago

你好, 本文章貌似有一处错误(不知道是不是因为Go版本不同,本人使用1.18)

go test -bench="Fib$" -cpuprofile=cpu.pprof .

应是 go test -bench="Fib$" --cpuprofile=cpu.pprof .

dablelv commented 1 year ago

博主,请问 profile 翻译成中文应该叫什么?

wangtonyz commented 11 months ago

@dablelv 博主,请问 profile 翻译成中文应该叫什么?

拆成两个单词 pro+file pro专业的,file文件,专业的文件

wangjc0216 commented 11 months ago

@dablelv 博主,请问 profile 翻译成中文应该叫什么?

profile,画像,轮廓;对于人来说,profile类似于用户的档案;对于程序来说,程序的轮廓就是内存、cpu使用情况,线程的数量,堆栈之类的情况。