Browse Source

pkg/debugutil: add 'mutex' profiler (Go 1.8+)

Signed-off-by: Gyu-Ho Lee <gyuhox@gmail.com>
Gyu-Ho Lee 8 years ago
parent
commit
5161b74799
1 changed files with 8 additions and 0 deletions
  1. 8 0
      pkg/debugutil/pprof.go

+ 8 - 0
pkg/debugutil/pprof.go

@@ -17,12 +17,19 @@ package debugutil
 import (
 	"net/http"
 	"net/http/pprof"
+	"runtime"
 )
 
 const HTTPPrefixPProf = "/debug/pprof"
 
 // PProfHandlers returns a map of pprof handlers keyed by the HTTP path.
 func PProfHandlers() map[string]http.Handler {
+	// set only when there's no existing setting
+	if runtime.SetMutexProfileFraction(-1) == 0 {
+		// 1 out of 5 mutex events are reported, on average
+		runtime.SetMutexProfileFraction(5)
+	}
+
 	m := make(map[string]http.Handler)
 
 	m[HTTPPrefixPProf+"/"] = http.HandlerFunc(pprof.Index)
@@ -34,6 +41,7 @@ func PProfHandlers() map[string]http.Handler {
 	m[HTTPPrefixPProf+"/goroutine"] = pprof.Handler("goroutine")
 	m[HTTPPrefixPProf+"/threadcreate"] = pprof.Handler("threadcreate")
 	m[HTTPPrefixPProf+"/block"] = pprof.Handler("block")
+	m[HTTPPrefixPProf+"/mutex"] = pprof.Handler("mutex")
 
 	return m
 }