From 55c9cfb80e066713f009547f7df7dddd2da35eb8 Mon Sep 17 00:00:00 2001 From: baude Date: Thu, 9 Nov 2017 09:29:15 -0600 Subject: Add cpu-profiling to kpod Add a global flag for cpu-profiling to allow us to profile kpod for performance issues. To parse its results, use: go tool pprof --text Signed-off-by: baude Closes: #36 Approved by: mheon --- cmd/kpod/main.go | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'cmd/kpod/main.go') diff --git a/cmd/kpod/main.go b/cmd/kpod/main.go index ab95995fe..97d942a3c 100644 --- a/cmd/kpod/main.go +++ b/cmd/kpod/main.go @@ -3,8 +3,10 @@ package main import ( "fmt" "os" + "runtime/pprof" "github.com/containers/storage/pkg/reexec" + "github.com/pkg/errors" "github.com/sirupsen/logrus" "github.com/urfave/cli" ) @@ -15,6 +17,7 @@ var kpodVersion = "" func main() { debug := false + cpuProfile := false if reexec.Init() { return @@ -77,12 +80,23 @@ func main() { debug = true } - + if c.GlobalIsSet("cpu-profile") { + f, err := os.Create(c.GlobalString("cpu-profile")) + if err != nil { + return errors.Wrapf(err, "unable to create cpu profiling file %s", + c.GlobalString("cpu-profile")) + } + cpuProfile = true + pprof.StartCPUProfile(f) + } return nil } app.After = func(*cli.Context) error { // called by Run() when the command handler succeeds shutdownStores() + if cpuProfile { + pprof.StopCPUProfile() + } return nil } cli.OsExiter = func(code int) { @@ -99,6 +113,10 @@ func main() { Name: "conmon", Usage: "path of the conmon binary", }, + cli.StringFlag{ + Name: "cpu-profile", + Usage: "path for the cpu profiling results", + }, cli.StringFlag{ Name: "log-level", Usage: "log messages above specified level: debug, info, warn, error (default), fatal or panic", -- cgit v1.2.3-54-g00ecf