软件开发过程中,项目上线并不是终点。上线后,还要对程序的取样分析运行情况,并重构现有的功能,让程序执行更高效更稳写。 golang的工具包内自带pprof功能,使找出程序中占内存和CPU较多的部分功能方便了不少。加上uber的火焰图,可视化显示,让我们在分析程序时更简单明了。pprof有两个包用来分析程序一个是net/http/pprof另一个是runtime/pprof,net/http/pprof只是对runtime/pprof包进行封装并用http暴露出来,如下图源码所示:
使用net/http/pprof分析web服务
pprof分析web项目,非常的简单只需要导入包即可。 _ "net/http/pprof" 编写一个小的web服务器
package main
import (
"fmt"
"math/rand"
"net/http"
_ "net/http/pprof"
"time"
)
var Count int64 = 0
func main() {
go calCount()
http.HandleFunc("/test", test)
http.HandleFunc("/data", handlerData)
err := http.ListenAndServe(":9909", nil)
if err != nil {
panic(err)
}
}
func handlerData(w http.ResponseWriter, r *http.Request) {
qUrl := r.URL
fmt.Println(qUrl)
fibRev := Fib()
var fib uint64
for i := 0; i < 5000; i++ {
fib = fibRev()
fmt.Println("fib = ", fib)
}
str := RandomStr(RandomInt(100, 500))
str = fmt.Sprintf("Fib = %d; String = %s", fib, str)
w.Write([]byte(str))
}
func test(w http.ResponseWriter, r *http.Request) {
fibRev := Fib()
var fib uint64
index := Count
arr := make([]uint64, index)
var i int64
for ; i < index; i++ {
fib = fibRev()
arr[i] = fib
fmt.Println("fib = ", fi