Skip to content

Instantly share code, notes, and snippets.

@itcuihao
Created September 13, 2023 10:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save itcuihao/b634ae0c1b2d16aaa66c61c9d1f23563 to your computer and use it in GitHub Desktop.
Save itcuihao/b634ae0c1b2d16aaa66c61c9d1f23563 to your computer and use it in GitHub Desktop.
golang pprof
package common
import (
"fmt"
"net"
"net/http"
_ "net/http/pprof"
"time"
)
func NewPprofServe(ports ...int64) {
fn := "NewPprofServe"
addr := ":0"
if len(ports) > 0 {
addr = fmt.Sprintf(":%d", ports[0])
}
server := &http.Server{
Addr: addr,
Handler: nil,
}
actualAddr := make(chan string, 1)
go func() {
listener, err := net.Listen("tcp", server.Addr)
if err != nil {
fmt.Println(fn, " Listener error:", err)
return
}
actualPort := listener.Addr().(*net.TCPAddr).Port
actualAddr <- fmt.Sprintf(":%d", actualPort)
// 启动 HTTP 服务器
err = server.Serve(listener)
if err != nil {
fmt.Println(fn, " Server error:", err)
}
}()
select {
case adr := <-actualAddr:
fmt.Println(fn, " pprof addr -> ", adr)
case <-time.After(time.Second * 3):
fmt.Println(fn, " pprof server timeout 3s")
return
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment