diff --git a/zh/14.6.md b/zh/14.6.md index a5a28500..53843f4d 100644 --- a/zh/14.6.md +++ b/zh/14.6.md @@ -1,23 +1,26 @@ # 14.6 pprof支持 Go语言有一个非常棒的设计就是标准库里面带有代码的性能监控工具,在两个地方有包: +```Go net/http/pprof runtime/pprof - +``` 其实net/http/pprof中只是使用runtime/pprof包来进行封装了一下,并在http端口上暴露出来 ## beego支持pprof 目前beego框架新增了pprof,该特性默认是不开启的,如果你需要测试性能,查看相应的执行goroutine之类的信息,其实Go的默认包"net/http/pprof"已经具有该功能,如果按照Go默认的方式执行Web,默认就可以使用,但是由于beego重新封装了ServHTTP函数,默认的包是无法开启该功能的,所以需要对beego的内部改造支持pprof。 - 首先在beego.Run函数中根据变量是否自动加载性能包 +```Go if PprofOn { BeeApp.RegisterController(`/debug/pprof`, &ProfController{}) BeeApp.RegisterController(`/debug/pprof/:pp([\w]+)`, &ProfController{}) } - +``` - 设计ProfConterller +```Go package beego @@ -45,13 +48,14 @@ Go语言有一个非常棒的设计就是标准库里面带有代码的性能监 this.Ctx.ResponseWriter.WriteHeader(200) } - +``` ## 使用入门 通过上面的设计,你可以通过如下代码开启pprof: +```Go beego.PprofOn = true - +``` 然后你就可以在浏览器中打开如下URL就看到如下界面: ![](images/14.6.pprof.png?raw=true) @@ -64,9 +68,10 @@ Go语言有一个非常棒的设计就是标准库里面带有代码的性能监 图14.8 显示当前goroutine的详细信息 我们还可以通过命令行获取更多详细的信息 +```Go go tool pprof http://localhost:8080/debug/pprof/profile - +``` 这时候程序就会进入30秒的profile收集时间,在这段时间内拼命刷新浏览器上的页面,尽量让cpu占用性能产生数据。 (pprof) top10