go的profile工具
题目来源:
答案1:
profile就是定时采样,收集cpu,内存等信息,进而给出性能优化指导。
Go 存使用采样,有四个相应的指标:
- inuse_objects:当我们认为内存中的驻留对象过多时,就会关注该指标
- inuse_space:当我们认为应用程序占据的 RSS 过大时,会关注该指标
- alloc_objects:当应用曾经发生过历史上的大量内存分配行为导致 CPU 或内存使用大幅上升时,可能关注该指标
- alloc_space:当应用历史上发生过内存使用大量上升时,会关注该指标
//(以net/http/pprof举例)
import (
"net/http"
_ "net/http/pprof"
)
func main(){
err :=http.ListenAndServe(":9909",nil)
if err != nil {
panic(err)
}
}
类型 | 描述 |
---|---|
allocs | 所有过去内存分配的采样信息(所有对象) |
blocks | 阻塞操作情况的采样信息(用于记录 goroutine 在等待共享资源花费的时间) |
cmdline | 当前程序的命令行的完整调用路径goroutine,显示程序启动命令参数及其参数 |
goroutine | 显示当前所有协程的堆栈信息 |
heap | 堆上的内存分配情况的采样信息(活跃对象) |
mutex | 锁竞争情况的采样信息 |
profile | cpu占用情况的采样信息,点击会下载文件 |
threadcreate | 系统线程创建情况的采样信息 |
trace | 程序运行跟踪信息 |
注意:由于内存分析是取样方式,并且也因为其记录的是分配内存,而不是使用内存。因此使用内存性能分析工具来准确判断程序具体的内存使用是比较困难的。
得到性能数据后,可以使用top、 web、 list等命令快速定位到相应的代码处,然后进行优化。