From e863dc456a636a000f6e39e957963618252ed091 Mon Sep 17 00:00:00 2001 From: Eric Coissac Date: Tue, 28 Mar 2023 20:07:26 +0700 Subject: [PATCH] Add an option --pprof Former-commit-id: 3ca1280e8daddbf1075e3189f9851211ce8882ae --- cmd/obitools/obipcr/main.go | 14 ++++++-------- pkg/obioptions/options.go | 11 +++++++++++ pkg/obiseq/pool.go | 8 +++++++- 3 files changed, 24 insertions(+), 9 deletions(-) diff --git a/cmd/obitools/obipcr/main.go b/cmd/obitools/obipcr/main.go index c256d71..d925d4f 100644 --- a/cmd/obitools/obipcr/main.go +++ b/cmd/obitools/obipcr/main.go @@ -2,8 +2,10 @@ package main import ( "os" + log "github.com/sirupsen/logrus" + "git.metabarcoding.org/lecasofts/go/obitools/pkg/obiiter" "git.metabarcoding.org/lecasofts/go/obitools/pkg/obioptions" "git.metabarcoding.org/lecasofts/go/obitools/pkg/obitools/obiconvert" @@ -12,13 +14,9 @@ import ( func main() { - // go tool pprof -http=":8000" ./obipairing ./cpu.pprof - // f, err := os.Create("cpu.pprof") - // if err != nil { - // log.Fatal(err) - // } - // pprof.StartCPUProfile(f) - // defer pprof.StopCPUProfile() + // go tool pprof -nodefraction=0 -http=:8081 http://localhost:8080/debug/pprof/allocs + // look at http://localhost:8080/debug/pprof for havng the possibilities + //go http.ListenAndServe("localhost:8080", nil) // go tool trace cpu.trace // ftrace, err := os.Create("cpu.trace") @@ -35,7 +33,7 @@ func main() { sequences, err := obiconvert.CLIReadBioSequences(args...) if err != nil { - log.Errorf("Cannot open file (%v)",err) + log.Errorf("Cannot open file (%v)", err) os.Exit(1) } diff --git a/pkg/obioptions/options.go b/pkg/obioptions/options.go index 1ba683b..66077e8 100644 --- a/pkg/obioptions/options.go +++ b/pkg/obioptions/options.go @@ -8,12 +8,17 @@ import ( log "github.com/sirupsen/logrus" "github.com/DavidGamba/go-getoptions" + + "net/http" + _ "net/http/pprof" + ) var _Debug = false var _ParallelWorkers = runtime.NumCPU()*2 - 1 var _MaxAllowedCPU = runtime.NumCPU() var _BatchSize = 5000 +var _Pprof = false type ArgumentParser func([]string) (*getoptions.GetOpt, []string) @@ -24,6 +29,7 @@ func GenerateOptionParser(optionset ...func(*getoptions.GetOpt)) ArgumentParser options.SetUnknownMode(getoptions.Fail) options.Bool("help", false, options.Alias("h", "?")) options.BoolVar(&_Debug, "debug", false) + options.BoolVar(&_Pprof, "pprof", false) options.IntVar(&_ParallelWorkers, "workers", _ParallelWorkers, options.Alias("w"), @@ -52,6 +58,11 @@ func GenerateOptionParser(optionset ...func(*getoptions.GetOpt)) ArgumentParser log.Debugln("Switch to debug level logging") } + if options.Called("pprof") { + go http.ListenAndServe("localhost:8080", nil) + log.Infoln("Start a pprof server at address http://localhost:8080/debug/pprof") + } + // Handle user errors if err != nil { fmt.Fprintf(os.Stderr, "ERROR: %s\n\n", err) diff --git a/pkg/obiseq/pool.go b/pkg/obiseq/pool.go index 08d2806..0b7d1be 100644 --- a/pkg/obiseq/pool.go +++ b/pkg/obiseq/pool.go @@ -45,7 +45,13 @@ func GetSlice(capacity int) []byte { } func CopySlice(src []byte) []byte { - sl := GetSlice(len(src))[0:len(src)] + sl := GetSlice(len(src)) + + if cap(sl) < len(src) { + log.Panicln("Bizarre... j'aurai pourtant cru") + } + + sl = sl[0:len(src)] copy(sl, src)