package core
|
|
|
|
import (
|
|
"os"
|
|
"runtime/pprof"
|
|
|
|
ctypes "github.com/tendermint/tendermint/rpc/core/types"
|
|
)
|
|
|
|
func UnsafeFlushMempool() (*ctypes.ResultUnsafeFlushMempool, error) {
|
|
mempool.Flush()
|
|
return &ctypes.ResultUnsafeFlushMempool{}, nil
|
|
}
|
|
|
|
var profFile *os.File
|
|
|
|
func UnsafeStartCPUProfiler(filename string) (*ctypes.ResultUnsafeProfile, error) {
|
|
var err error
|
|
profFile, err = os.Create(filename)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
err = pprof.StartCPUProfile(profFile)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &ctypes.ResultUnsafeProfile{}, nil
|
|
}
|
|
|
|
func UnsafeStopCPUProfiler() (*ctypes.ResultUnsafeProfile, error) {
|
|
pprof.StopCPUProfile()
|
|
if err := profFile.Close(); err != nil {
|
|
return nil, err
|
|
}
|
|
return &ctypes.ResultUnsafeProfile{}, nil
|
|
}
|
|
|
|
func UnsafeWriteHeapProfile(filename string) (*ctypes.ResultUnsafeProfile, error) {
|
|
memProfFile, err := os.Create(filename)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if err := pprof.WriteHeapProfile(memProfFile); err != nil {
|
|
return nil, err
|
|
}
|
|
if err := memProfFile.Close(); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &ctypes.ResultUnsafeProfile{}, nil
|
|
}
|