github.com/go-darwin/sys@v0.0.0-20220510002607-68fd01f054ca/testdata/testprog/memprof.go (about)

     1  // Copyright 2016 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package main
     6  
     7  import (
     8  	"bytes"
     9  	"fmt"
    10  	"os"
    11  	"runtime"
    12  	"runtime/pprof"
    13  )
    14  
    15  func init() {
    16  	register("MemProf", MemProf)
    17  }
    18  
    19  var memProfBuf bytes.Buffer
    20  var memProfStr string
    21  
    22  func MemProf() {
    23  	// Force heap sampling for determinism.
    24  	runtime.MemProfileRate = 1
    25  
    26  	for i := 0; i < 10; i++ {
    27  		fmt.Fprintf(&memProfBuf, "%*d\n", i, i)
    28  	}
    29  	memProfStr = memProfBuf.String()
    30  
    31  	runtime.GC()
    32  
    33  	f, err := os.CreateTemp("", "memprof")
    34  	if err != nil {
    35  		fmt.Fprintln(os.Stderr, err)
    36  		os.Exit(2)
    37  	}
    38  
    39  	if err := pprof.WriteHeapProfile(f); err != nil {
    40  		fmt.Fprintln(os.Stderr, err)
    41  		os.Exit(2)
    42  	}
    43  
    44  	name := f.Name()
    45  	if err := f.Close(); err != nil {
    46  		fmt.Fprintln(os.Stderr, err)
    47  		os.Exit(2)
    48  	}
    49  
    50  	fmt.Println(name)
    51  }