[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 (
"fmt"
"github.com/kaspanet/kaspad/config"
"os"
"path/filepath"
"strconv"
"strings"
"github.com/kaspanet/kaspad/config"
"github.com/kaspanet/kaspad/util"
"github.com/pkg/errors"
@ -37,6 +39,7 @@ type configFlags struct {
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."`
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
}
@ -78,6 +81,13 @@ func parseConfig() (*configFlags, error) {
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)
return cfg, nil

View File

@ -2,11 +2,16 @@ package main
import (
"fmt"
"github.com/kaspanet/kaspad/version"
"net"
"net/http"
"os"
"github.com/kaspanet/kaspad/version"
"github.com/pkg/errors"
_ "net/http/pprof"
"github.com/kaspanet/kaspad/signal"
"github.com/kaspanet/kaspad/util/panics"
)
@ -28,6 +33,17 @@ func main() {
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)
if err != nil {
panic(errors.Wrap(err, "Error connecting to the RPC server"))