Merge pull request #1681 from weaveworks/block-profiling-1672

Add flag for block profiling
This commit is contained in:
Jonathan Lange
2016-07-14 15:54:03 +01:00
committed by GitHub
3 changed files with 12 additions and 0 deletions

View File

@@ -7,6 +7,7 @@ import (
_ "net/http/pprof"
"net/url"
"os"
"runtime"
"strconv"
"strings"
"time"
@@ -199,6 +200,7 @@ func pipeRouterFactory(userIDer multitenant.UserIDer, pipeRouterURL, consulInf s
func appMain(flags appFlags) {
setLogLevel(flags.logLevel)
setLogFormatter(flags.logPrefix)
runtime.SetBlockProfileRate(flags.blockProfileRate)
defer log.Info("app exiting")
rand.Seed(time.Now().UnixNano())

View File

@@ -111,6 +111,8 @@ type appFlags struct {
memcachedExpiration time.Duration
userIDHeader string
blockProfileRate int
awsCreateTables bool
consulInf string
}
@@ -197,6 +199,8 @@ func main() {
flag.StringVar(&flags.app.memcachedService, "app.memcached.service", "memcached", "SRV service used to discover memcache servers.")
flag.StringVar(&flags.app.userIDHeader, "app.userid.header", "", "HTTP header to use as userid")
flag.IntVar(&flags.app.blockProfileRate, "app.block.profile.rate", 0, "If more than 0, enable block profiling. The profiler aims to sample an average of one blocking event per rate nanoseconds spent blocked.")
flag.BoolVar(&flags.app.awsCreateTables, "app.aws.create.tables", false, "Create the tables in DynamoDB")
flag.StringVar(&flags.app.consulInf, "app.consul.inf", "", "The interface who's address I should advertise myself under in consul")

View File

@@ -72,6 +72,12 @@ To collect the CPU profile of the Scope Probe:
go tool pprof http://localhost:4041/debug/pprof/profile
To collect a blocking profile of the Scope App, make sure you have launched
Scope with `--app.block.profile.rate=N` (where `N` is the number of
nanoseconds between samples) and then:
go tool pprof http://localhost:4040/debug/pprof/block
If you don't have `go` installed, you can use a Docker container instead:
To collect the memory profile of the Scope App: