Files
2024-04-02 15:13:13 +03:00
..
2024-03-29 11:40:39 +03:00
2024-04-02 15:13:13 +03:00
2024-04-02 15:13:13 +03:00
2024-04-02 15:13:13 +03:00

pprof

gin pprof middleware

Package pprof serves via its HTTP server runtime profiling data in the format expected by the pprof visualization tool.

Copied from gin-contrib/pprof

Usage

Start using it

Import it in your code:

import "git.company.lan/gopkg/gin-contrib/pprof"

Example

package main

import (
  "git.company.lan/gopkg/gin-contrib/pprof"
  "git.company.lan/gopkg/gin"
)

func main() {
  router := gin.Default()
  pprof.Register(router)
  router.Run(":8080")
}

change default path prefix

func main() {
  router := gin.Default()
  // default is "debug/pprof"
  pprof.Register(router, "dev/pprof")
  router.Run(":8080")
}

custom router group

package main

import (
  "net/http"

  "git.company.lan/gopkg/gin-contrib/pprof"
  "git.company.lan/gopkg/gin"
)

func main() {
  router := gin.Default()
  adminGroup := router.Group("/admin", func(c *gin.Context) {
    if c.Request.Header.Get("Authorization") != "foobar" {
      c.AbortWithStatus(http.StatusForbidden)
      return
    }
    c.Next()
  })
  pprof.RouteRegister(adminGroup, "pprof")
  router.Run(":8080")
}

Use the pprof tool

Then use the pprof tool to look at the heap profile:

go tool pprof http://localhost:8080/debug/pprof/heap

Or to look at a 30-second CPU profile:

go tool pprof http://localhost:8080/debug/pprof/profile

Or to look at the goroutine blocking profile, after calling runtime.SetBlockProfileRate in your program:

go tool pprof http://localhost:8080/debug/pprof/block

Or to collect a 5-second execution trace:

wget http://localhost:8080/debug/pprof/trace?seconds=5