package main
import (
"fmt"
"github.com/gin-gonic/gin"
"math/rand"
"net/http"
_ "net/http/pprof"
"runtime"
"time"
)
var m = map[int64]int64{}
var r = rand.New(rand.NewSource(time.Now().Unix()))
func main() {
go http.ListenAndServe(":6060", nil)
go func() {
for {
var _ string
}
}()
go func() {
for {
time.Sleep(10 * time.Millisecond)
}
}()
for {
time.Sleep(1 * time.Second)
fmt.Println(runtime.NumGoroutine())
}
}
func initHttp() {
router := gin.Default()
router.Use(gin.Recovery())
router.Use(func(context *gin.Context) {
fmt.Println("第一个前")
context.Next()
fmt.Println("第一个后")
})
router.Use(func(context *gin.Context) {
fmt.Println("第二个前")
context.Next()
fmt.Println("第二个后")
})
router.GET("/", func(context *gin.Context) {
fmt.Println("处理器")
fmt.Println("handler")
m := map[string]string{};
m["aaa"] = "bbb";
context.JSON(http.StatusOK, m);
})
go router.Run(":8080")
}
上面的一段代码会导致cpu过高。
步骤一:
访问http://127.0.0.1:6060/debug/pprof/,点击profile,会触发性能分析,默认会执行30s。然后会下载一个文件下来。
步骤二:
执行go tool pprof D:\Downloads\profile(下载下来文件的绝对路径),进入命令模式
步骤三:
执行top 10,会看到消耗cpu最高的协程
然后执行list命令既可以看,这个协程执行什么比较耗时耗