Merge pull request #67 from chihaya/pprof-handler

Add pprof debug HTTP endpoint
This commit is contained in:
Jimmy Zelinskie 2015-06-26 18:42:20 -04:00
commit 9a0d86610c
2 changed files with 54 additions and 18 deletions

View file

@ -9,7 +9,6 @@ import (
"os"
"os/signal"
"runtime"
"runtime/pprof"
"sync"
"syscall"
@ -27,13 +26,11 @@ import (
var (
maxProcs int
profile string
configPath string
)
func init() {
flag.IntVar(&maxProcs, "maxprocs", runtime.NumCPU(), "maximum parallel threads")
flag.StringVar(&profile, "profile", "", "if non-empty, path to write profiling data")
flag.StringVar(&configPath, "config", "", "path to the configuration file")
}
@ -47,21 +44,8 @@ func Boot() {
runtime.GOMAXPROCS(maxProcs)
glog.V(1).Info("Set max threads to ", maxProcs)
if profile != "" {
f, err := os.Create(profile)
if err != nil {
glog.Fatalf("Failed to create profile file: %s\n", err)
}
defer f.Close()
pprof.StartCPUProfile(f)
glog.Info("Started profiling")
defer func() {
pprof.StopCPUProfile()
glog.Info("Stopped profiling")
}()
}
debugBoot()
defer debugShutdown()
cfg, err := config.Open(configPath)
if err != nil {

52
debug.go Normal file
View file

@ -0,0 +1,52 @@
package chihaya
import (
"flag"
"net/http"
"os"
"runtime/pprof"
_ "net/http/pprof"
"github.com/golang/glog"
)
var (
profile string
debugAddr string
profileFile *os.File
)
func init() {
flag.StringVar(&profile, "profile", "", "if non-empty, path to write CPU profiling data")
flag.StringVar(&debugAddr, "debug", "", "if non-empty, address to serve debug data")
}
func debugBoot() {
var err error
if debugAddr != "" {
go func() {
glog.Info("Starting debug HTTP on ", debugAddr)
glog.Fatal(http.ListenAndServe(debugAddr, nil))
}()
}
if profile != "" {
profileFile, err = os.Create(profile)
if err != nil {
glog.Fatalf("Failed to create profile file: %s\n", err)
}
pprof.StartCPUProfile(profileFile)
glog.Info("Started profiling")
}
}
func debugShutdown() {
if profileFile != nil {
profileFile.Close()
pprof.StopCPUProfile()
glog.Info("Stopped profiling")
}
}