github.com/status-im/status-go@v1.1.0/profiling/heap.go (about)

     1  package profiling
     2  
     3  import (
     4  	"os"
     5  	"path/filepath"
     6  	"runtime"
     7  	"runtime/pprof"
     8  )
     9  
    10  // MemFilename is a filename in which the memory profiling is stored.
    11  const MemFilename = "status_mem.prof"
    12  
    13  var memFile *os.File
    14  
    15  // WriteHeapFile writes heap memory to the file.
    16  func WriteHeapFile(dataDir string) error {
    17  	var err error
    18  
    19  	if memFile == nil {
    20  		memFile, err = os.Create(filepath.Join(dataDir, MemFilename))
    21  		if err != nil {
    22  			return err
    23  		}
    24  		defer func() {
    25  			memFile.Close() //nolint: errcheck
    26  			memFile = nil
    27  		}()
    28  	}
    29  
    30  	runtime.GC()
    31  	err = pprof.WriteHeapProfile(memFile)
    32  
    33  	return err
    34  }