@ -4,18 +4,21 @@
package base
import (
"context"
"os"
"path/filepath"
"runtime"
"runtime/pprof"
"time"
"github.com/hashicorp/boundary/internal/observability/event"
)
func StartMemProfiler ( ctx context . Context ) {
const op = "base.StartMemProfiler"
profileDir := filepath . Join ( os . TempDir ( ) , "boundaryprof" )
if err := os . MkdirAll ( profileDir , 0 o700 ) ; err != nil {
event . WriteError ( ctx , op , err , "could not create profile directory" )
event . WriteError ( ctx , op , err , event . WithInfoMsg ( "could not create profile directory" ) )
return
}
@ -24,11 +27,11 @@ func StartMemProfiler(ctx context.Context) {
filename := filepath . Join ( profileDir , time . Now ( ) . UTC ( ) . Format ( "20060102_150405" ) ) + ".pprof"
f , err := os . Create ( filename )
if err != nil {
event . WriteError ( ctx , op , err , event . WithInfo ( "could not create memory profile" ) )
event . WriteError ( ctx , op , err , event . WithInfo Msg ( "could not create memory profile" ) )
}
runtime . GC ( )
if err := pprof . WriteHeapProfile ( f ) ; err != nil {
event . WriteError ( ctx , op , err , "could not write memory profile" )
event . WriteError ( ctx , op , err , event . WithInfoMsg ( "could not write memory profile" ) )
}
f . Close ( )
event . WriteSysEvent ( ctx , op , "wrote memory profile" , "filename" , filename )