[NOD-853] Add profiler server to kaspaminer (#664)

This commit is contained in:
Svarog 2020-03-19 17:19:31 +02:00 committed by GitHub
parent 49855e6333
commit 586624c836
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 28 additions and 2 deletions

View File

@ -2,11 +2,13 @@ package main
import ( import (
"fmt" "fmt"
"github.com/kaspanet/kaspad/config"
"os" "os"
"path/filepath" "path/filepath"
"strconv"
"strings" "strings"
"github.com/kaspanet/kaspad/config"
"github.com/kaspanet/kaspad/util" "github.com/kaspanet/kaspad/util"
"github.com/pkg/errors" "github.com/pkg/errors"
@ -37,6 +39,7 @@ type configFlags struct {
Verbose bool `long:"verbose" short:"v" description:"Enable logging of RPC requests"` Verbose bool `long:"verbose" short:"v" description:"Enable logging of RPC requests"`
NumberOfBlocks uint64 `short:"n" long:"numblocks" description:"Number of blocks to mine. If omitted, will mine until the process is interrupted."` NumberOfBlocks uint64 `short:"n" long:"numblocks" description:"Number of blocks to mine. If omitted, will mine until the process is interrupted."`
BlockDelay uint64 `long:"block-delay" description:"Delay for block submission (in milliseconds). This is used only for testing purposes."` BlockDelay uint64 `long:"block-delay" description:"Delay for block submission (in milliseconds). This is used only for testing purposes."`
Profile string `long:"profile" description:"Enable HTTP profiling on given port -- NOTE port must be between 1024 and 65536"`
config.NetworkFlags config.NetworkFlags
} }
@ -78,6 +81,13 @@ func parseConfig() (*configFlags, error) {
return nil, errors.New("--rpccert should be omitted if --notls is used") return nil, errors.New("--rpccert should be omitted if --notls is used")
} }
if cfg.Profile != "" {
profilePort, err := strconv.Atoi(cfg.Profile)
if err != nil || profilePort < 1024 || profilePort > 65535 {
return nil, errors.New("The profile port must be between 1024 and 65535")
}
}
initLog(defaultLogFile, defaultErrLogFile) initLog(defaultLogFile, defaultErrLogFile)
return cfg, nil return cfg, nil

View File

@ -2,11 +2,16 @@ package main
import ( import (
"fmt" "fmt"
"github.com/kaspanet/kaspad/version" "net"
"net/http"
"os" "os"
"github.com/kaspanet/kaspad/version"
"github.com/pkg/errors" "github.com/pkg/errors"
_ "net/http/pprof"
"github.com/kaspanet/kaspad/signal" "github.com/kaspanet/kaspad/signal"
"github.com/kaspanet/kaspad/util/panics" "github.com/kaspanet/kaspad/util/panics"
) )
@ -28,6 +33,17 @@ func main() {
enableRPCLogging() enableRPCLogging()
} }
// Enable http profiling server if requested.
if cfg.Profile != "" {
spawn(func() {
listenAddr := net.JoinHostPort("", cfg.Profile)
log.Infof("Profile server listening on %s", listenAddr)
profileRedirect := http.RedirectHandler("/debug/pprof", http.StatusSeeOther)
http.Handle("/", profileRedirect)
log.Errorf("%s", http.ListenAndServe(listenAddr, nil))
})
}
client, err := connectToServer(cfg) client, err := connectToServer(cfg)
if err != nil { if err != nil {
panic(errors.Wrap(err, "Error connecting to the RPC server")) panic(errors.Wrap(err, "Error connecting to the RPC server"))