diff --git a/cmd/rekor-server/app/root.go b/cmd/rekor-server/app/root.go index af606de968fd39e0a6180dd7901636f5d8e413d4..92aa60bdc202841fe6ddc6966f7d28ef9ba0b6cf 100644 --- a/cmd/rekor-server/app/root.go +++ b/cmd/rekor-server/app/root.go @@ -17,6 +17,8 @@ package app import ( "fmt" + "net/http" + "net/http/pprof" "os" "runtime/debug" @@ -27,9 +29,12 @@ import ( "github.com/sigstore/rekor/pkg/log" ) -var cfgFile string -var logType string -var logRangeMap LogRanges +var ( + cfgFile string + logType string + enablePprof bool + logRangeMap LogRanges +) // rootCmd represents the base command when called without any subcommands var rootCmd = &cobra.Command{ @@ -57,6 +62,7 @@ func init() { rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is $HOME/.rekor-server.yaml)") rootCmd.PersistentFlags().StringVar(&logType, "log_type", "dev", "logger type to use (dev/prod)") + rootCmd.PersistentFlags().BoolVar(&enablePprof, "enable_pprof", false, "enable pprof for profiling on port 6060") rootCmd.PersistentFlags().String("trillian_log_server.address", "127.0.0.1", "Trillian log server address") rootCmd.PersistentFlags().Uint16("trillian_log_server.port", 8090, "Trillian log server port") @@ -88,6 +94,21 @@ func init() { if GitVersion != "devel" { return } + log.Logger.Debugf("pprof enabled %v", enablePprof) + // Enable pprof + if enablePprof { + go func() { + mux := http.NewServeMux() + + mux.HandleFunc("/debug/pprof/", pprof.Index) + mux.HandleFunc("/debug/pprof/{action}", pprof.Index) + mux.HandleFunc("/debug/pprof/symbol", pprof.Symbol) + + if err := http.ListenAndServe(":6060", mux); err != nil && err != http.ErrServerClosed { + log.Logger.Fatalf("Error when starting or running http server: %v", err) + } + }() + } bi, ok := debug.ReadBuildInfo() if !ok {