7fb4851eb9
* updates bitswap to include _many_ perf enhancements and bug fixes. * updates go-fs-lock because the version here is pretty old. * updates go-libp2p * updates bbloom _just_ in case, because the version we were depending on had bugs (looks like we're not actually using it).
59 lines
1.1 KiB
Go
59 lines
1.1 KiB
Go
package cli
|
|
|
|
import (
|
|
"io"
|
|
"net/http"
|
|
"os"
|
|
|
|
"github.com/urfave/cli/v2"
|
|
"golang.org/x/xerrors"
|
|
|
|
"github.com/filecoin-project/lotus/node/repo"
|
|
manet "github.com/multiformats/go-multiaddr/net"
|
|
)
|
|
|
|
var pprofCmd = &cli.Command{
|
|
Name: "pprof",
|
|
Hidden: true,
|
|
Subcommands: []*cli.Command{
|
|
PprofGoroutines,
|
|
},
|
|
}
|
|
|
|
var PprofGoroutines = &cli.Command{
|
|
Name: "goroutines",
|
|
Usage: "Get goroutine stacks",
|
|
Action: func(cctx *cli.Context) error {
|
|
ti, ok := cctx.App.Metadata["repoType"]
|
|
if !ok {
|
|
log.Errorf("unknown repo type, are you sure you want to use GetAPI?")
|
|
ti = repo.FullNode
|
|
}
|
|
t, ok := ti.(repo.RepoType)
|
|
if !ok {
|
|
log.Errorf("repoType type does not match the type of repo.RepoType")
|
|
}
|
|
ainfo, err := GetAPIInfo(cctx, t)
|
|
if err != nil {
|
|
return xerrors.Errorf("could not get API info: %w", err)
|
|
}
|
|
_, addr, err := manet.DialArgs(ainfo.Addr)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
addr = "http://" + addr + "/debug/pprof/goroutine?debug=2"
|
|
|
|
r, err := http.Get(addr) //nolint:gosec
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if _, err := io.Copy(os.Stdout, r.Body); err != nil {
|
|
return err
|
|
}
|
|
|
|
return r.Body.Close()
|
|
},
|
|
}
|