我写的一个服务,有段时间CPU占用一直是100%。因为一直在开发环境,还没上线,今天终于有时间了就排查了一下。100%这种占用,一看就感觉是某个for循环导致的。
首先,选择分析工具,Golang的性能分析工具pprof。
在Gin这个框架中,需要通过注册才可以使用。
方式
if ok, _ := strconv.ParseBool(utils.GetEnv("DEVELOP_MODE")); ok {
pprof.Register(router)
}
我们用了一个环境变量DEVELOP_MODE来控制,这样子方便控制是否打开调试,因为这个东西一旦开启会对性能有影响。
如果不是用的gin框架,那么直接导入包import _ "net/http/pprof"
就会打开调试,为啥呢?因为pprof/pprof.go文件是这么写的