add cpu-profile flag (#2723)
This commit is contained in:
parent
08794c5b6d
commit
421ef3bf9c
|
@ -6,6 +6,7 @@ import (
|
||||||
_ "net/http/pprof"
|
_ "net/http/pprof"
|
||||||
"os"
|
"os"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
"runtime/pprof"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
@ -71,6 +72,7 @@ type Flags struct {
|
||||||
DisableCAPI bool
|
DisableCAPI bool
|
||||||
Transform string
|
Transform string
|
||||||
OrderEvent bool
|
OrderEvent bool
|
||||||
|
CpuProfile string
|
||||||
}
|
}
|
||||||
|
|
||||||
type labelsMap map[string]string
|
type labelsMap map[string]string
|
||||||
|
@ -179,6 +181,7 @@ func (f *Flags) Parse() {
|
||||||
}
|
}
|
||||||
|
|
||||||
flag.StringVar(&dumpFolder, "dump-data", "", "dump parsers/buckets raw outputs")
|
flag.StringVar(&dumpFolder, "dump-data", "", "dump parsers/buckets raw outputs")
|
||||||
|
flag.StringVar(&f.CpuProfile, "cpu-profile", "", "write cpu profile to file")
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -352,9 +355,24 @@ func main() {
|
||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if flags.CpuProfile != "" {
|
||||||
|
f, err := os.Create(flags.CpuProfile)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("could not create CPU profile: %s", err)
|
||||||
|
}
|
||||||
|
log.Infof("CPU profile will be written to %s", flags.CpuProfile)
|
||||||
|
if err := pprof.StartCPUProfile(f); err != nil {
|
||||||
|
f.Close()
|
||||||
|
log.Fatalf("could not start CPU profile: %s", err)
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
defer pprof.StopCPUProfile()
|
||||||
|
}
|
||||||
|
|
||||||
err := StartRunSvc()
|
err := StartRunSvc()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
pprof.StopCPUProfile()
|
||||||
|
log.Fatal(err) //nolint:gocritic // Disable warning for the defer pprof.StopCPUProfile() call
|
||||||
}
|
}
|
||||||
|
|
||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
|
|
|
@ -4,6 +4,7 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"runtime/pprof"
|
||||||
|
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
|
|
||||||
|
@ -22,6 +23,10 @@ func StartRunSvc() error {
|
||||||
|
|
||||||
defer trace.CatchPanic("crowdsec/StartRunSvc")
|
defer trace.CatchPanic("crowdsec/StartRunSvc")
|
||||||
|
|
||||||
|
//Always try to stop CPU profiling to avoid passing flags around
|
||||||
|
//It's a noop if profiling is not enabled
|
||||||
|
defer pprof.StopCPUProfile()
|
||||||
|
|
||||||
if cConfig, err = LoadConfig(flags.ConfigFile, flags.DisableAgent, flags.DisableAPI, false); err != nil {
|
if cConfig, err = LoadConfig(flags.ConfigFile, flags.DisableAgent, flags.DisableAPI, false); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"runtime/pprof"
|
||||||
|
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
"golang.org/x/sys/windows/svc"
|
"golang.org/x/sys/windows/svc"
|
||||||
|
@ -19,6 +20,10 @@ func StartRunSvc() error {
|
||||||
|
|
||||||
defer trace.CatchPanic("crowdsec/StartRunSvc")
|
defer trace.CatchPanic("crowdsec/StartRunSvc")
|
||||||
|
|
||||||
|
//Always try to stop CPU profiling to avoid passing flags around
|
||||||
|
//It's a noop if profiling is not enabled
|
||||||
|
defer pprof.StopCPUProfile()
|
||||||
|
|
||||||
isRunninginService, err := svc.IsWindowsService()
|
isRunninginService, err := svc.IsWindowsService()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to determine if we are running in windows service mode: %w", err)
|
return fmt.Errorf("failed to determine if we are running in windows service mode: %w", err)
|
||||||
|
|
|
@ -4,6 +4,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
|
"runtime/pprof"
|
||||||
"syscall"
|
"syscall"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
@ -245,6 +246,10 @@ func HandleSignals(cConfig *csconfig.Config) error {
|
||||||
|
|
||||||
exitChan := make(chan error)
|
exitChan := make(chan error)
|
||||||
|
|
||||||
|
//Always try to stop CPU profiling to avoid passing flags around
|
||||||
|
//It's a noop if profiling is not enabled
|
||||||
|
defer pprof.StopCPUProfile()
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
defer trace.CatchPanic("crowdsec/HandleSignals")
|
defer trace.CatchPanic("crowdsec/HandleSignals")
|
||||||
Loop:
|
Loop:
|
||||||
|
|
Loading…
Reference in a new issue