status-im/status-go

View on GitHub
profiling/heap.go

Summary

Maintainability
A
0 mins
Test Coverage
B
87%
package profiling

import (
    "os"
    "path/filepath"
    "runtime"
    "runtime/pprof"
)

// MemFilename is a filename in which the memory profiling is stored.
const MemFilename = "status_mem.prof"

var memFile *os.File

// WriteHeapFile writes heap memory to the file.
func WriteHeapFile(dataDir string) error {
    var err error

    if memFile == nil {
        memFile, err = os.Create(filepath.Join(dataDir, MemFilename))
        if err != nil {
            return err
        }
        defer func() {
            memFile.Close() //nolint: errcheck
            memFile = nil
        }()
    }

    runtime.GC()
    err = pprof.WriteHeapProfile(memFile)

    return err
}