add cpu and mem pprof

This commit is contained in:
Chris Lu 2017-06-22 01:33:58 -07:00
parent 2c7dad589d
commit 1fbb8723dc
7 changed files with 46 additions and 17 deletions

View File

@ -4,7 +4,6 @@ import (
"net/http"
"os"
"runtime"
"runtime/pprof"
"strconv"
"strings"
"time"
@ -48,6 +47,7 @@ var (
masterWhiteListOption = cmdMaster.Flag.String("whiteList", "", "comma separated Ip addresses having write permission. No limit if empty.")
masterSecureKey = cmdMaster.Flag.String("secure.secret", "", "secret to encrypt Json Web Token(JWT)")
masterCpuProfile = cmdMaster.Flag.String("cpuprofile", "", "cpu profile output file")
masterMemProfile = cmdMaster.Flag.String("memprofile", "", "memory profile output file")
masterWhiteList []string
)
@ -57,17 +57,8 @@ func runMaster(cmd *Command, args []string) bool {
*mMaxCpu = runtime.NumCPU()
}
runtime.GOMAXPROCS(*mMaxCpu)
if *masterCpuProfile != "" {
f, err := os.Create(*masterCpuProfile)
if err != nil {
glog.Fatal(err)
}
pprof.StartCPUProfile(f)
defer pprof.StopCPUProfile()
OnInterrupt(func() {
pprof.StopCPUProfile()
})
}
util.SetupProfiling(*masterCpuProfile, *masterMemProfile)
if err := util.TestFolderWritable(*metaFolder); err != nil {
glog.Fatalf("Check Meta Folder (-mdir) Writable %s : %s", *metaFolder, err)
}

View File

@ -31,7 +31,7 @@ func runMount(cmd *Command, args []string) bool {
return false
}
OnInterrupt(func() {
util.OnInterrupt(func() {
fuse.Unmount(*mountOptions.dir)
c.Close()
})

View File

@ -290,7 +290,7 @@ func runServer(cmd *Command, args []string) bool {
}()
}
OnInterrupt(func() {
util.OnInterrupt(func() {
volumeServer.Shutdown()
pprof.StopCPUProfile()
})

View File

@ -36,6 +36,8 @@ type VolumeServerOptions struct {
indexType *string
fixJpgOrientation *bool
readRedirect *bool
cpuProfile *string
memProfile *string
}
func init() {
@ -54,6 +56,8 @@ func init() {
v.indexType = cmdVolume.Flag.String("index", "memory", "Choose [memory|leveldb|boltdb|btree] mode for memory~performance balance.")
v.fixJpgOrientation = cmdVolume.Flag.Bool("images.fix.orientation", true, "Adjust jpg orientation when uploading.")
v.readRedirect = cmdVolume.Flag.Bool("read.redirect", true, "Redirect moved or non-local volumes.")
v.cpuProfile = cmdVolume.Flag.String("cpuprofile", "", "cpu profile output file")
v.memProfile = cmdVolume.Flag.String("memprofile", "", "memory profile output file")
}
var cmdVolume = &Command{
@ -75,6 +79,7 @@ func runVolume(cmd *Command, args []string) bool {
*v.maxCpu = runtime.NumCPU()
}
runtime.GOMAXPROCS(*v.maxCpu)
util.SetupProfiling(*v.cpuProfile, *v.memProfile)
//Set multiple folders and each folder's max volume count limit'
v.folders = strings.Split(*volumeFolders, ",")
@ -156,7 +161,7 @@ func runVolume(cmd *Command, args []string) bool {
}()
}
OnInterrupt(func() {
util.OnInterrupt(func() {
volumeServer.Shutdown()
})

33
weed/util/pprof.go Normal file
View File

@ -0,0 +1,33 @@
package util
import (
"os"
"runtime/pprof"
"github.com/chrislusf/seaweedfs/weed/glog"
)
func SetupProfiling(cpuProfile, memProfile string) {
if cpuProfile != "" {
f, err := os.Create(cpuProfile)
if err != nil {
glog.Fatal(err)
}
pprof.StartCPUProfile(f)
defer pprof.StopCPUProfile()
OnInterrupt(func() {
pprof.StopCPUProfile()
})
}
if memProfile != "" {
f, err := os.Create(memProfile)
if err != nil {
glog.Fatal(err)
}
OnInterrupt(func() {
pprof.WriteHeapProfile(f)
f.Close()
})
}
}

View File

@ -1,6 +1,6 @@
// +build !plan9
package command
package util
import (
"os"

View File

@ -1,6 +1,6 @@
// +build plan9
package command
package util
func OnInterrupt(fn func()) {
}