package core
|
|
|
|
import (
|
|
"os"
|
|
"runtime/pprof"
|
|
|
|
ctypes "github.com/tendermint/tendermint/rpc/core/types"
|
|
rpctypes "github.com/tendermint/tendermint/rpc/lib/types"
|
|
)
|
|
|
|
// UnsafeFlushMempool removes all transactions from the mempool.
|
|
func UnsafeFlushMempool(ctx *rpctypes.Context) (*ctypes.ResultUnsafeFlushMempool, error) {
|
|
mempool.Flush()
|
|
return &ctypes.ResultUnsafeFlushMempool{}, nil
|
|
}
|
|
|
|
var profFile *os.File
|
|
|
|
// UnsafeStartCPUProfiler starts a pprof profiler using the given filename.
|
|
func UnsafeStartCPUProfiler(ctx *rpctypes.Context, 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
|
|
}
|
|
|
|
// UnsafeStopCPUProfiler stops the running pprof profiler.
|
|
func UnsafeStopCPUProfiler(ctx *rpctypes.Context) (*ctypes.ResultUnsafeProfile, error) {
|
|
pprof.StopCPUProfile()
|
|
if err := profFile.Close(); err != nil {
|
|
return nil, err
|
|
}
|
|
return &ctypes.ResultUnsafeProfile{}, nil
|
|
}
|
|
|
|
// UnsafeWriteHeapProfile dumps a heap profile to the given filename.
|
|
func UnsafeWriteHeapProfile(ctx *rpctypes.Context, 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
|
|
}
|