mirror of
https://github.com/ipfs/kubo.git
synced 2025-06-30 09:59:13 +08:00
Merge pull request #235 from jbenet/feat/mprof-in-cli-ipfs1-debug
perf(cmd/ipfs) write mprof file in debug mode
This commit is contained in:
@ -5,3 +5,11 @@ build:
|
||||
|
||||
install: build
|
||||
go install
|
||||
|
||||
# cpu profiling: `go tool pprof ipfs cpu.prof`
|
||||
# mem profiling: `go tool pprof ipfs ipfs.mprof`
|
||||
|
||||
clean:
|
||||
rm -f cpu.prof
|
||||
rm -f ipfs.mprof
|
||||
rm -f ipfs
|
||||
|
@ -17,6 +17,8 @@ import (
|
||||
u "github.com/jbenet/go-ipfs/util"
|
||||
)
|
||||
|
||||
const heapProfile = "ipfs.mprof"
|
||||
|
||||
// The IPFS command tree. It is an instance of `commander.Command`.
|
||||
var CmdIpfs = &commander.Command{
|
||||
UsageLine: "ipfs [<flags>] <command> [<args>]",
|
||||
@ -99,12 +101,14 @@ func main() {
|
||||
// if debugging, setup profiling.
|
||||
if u.Debug {
|
||||
ofi, err := os.Create("cpu.prof")
|
||||
defer ofi.Close()
|
||||
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
}
|
||||
|
||||
pprof.StartCPUProfile(ofi)
|
||||
defer ofi.Close()
|
||||
defer pprof.StopCPUProfile()
|
||||
}
|
||||
|
||||
@ -115,6 +119,13 @@ func main() {
|
||||
}
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
if u.Debug {
|
||||
err := writeHeapProfileToFile()
|
||||
if err != nil {
|
||||
log.Critical(err)
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
@ -218,3 +229,12 @@ func setupDaemon(confdir string, node *core.IpfsNode) (*daemon.DaemonListener, e
|
||||
go dl.Listen()
|
||||
return dl, nil
|
||||
}
|
||||
|
||||
func writeHeapProfileToFile() error {
|
||||
mprof, err := os.Create(heapProfile)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
defer mprof.Close()
|
||||
return pprof.WriteHeapProfile(mprof)
|
||||
}
|
||||
|
Reference in New Issue
Block a user