mirror of
				https://github.com/optim-enterprises-bv/vault.git
				synced 2025-11-03 20:17:59 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			44 lines
		
	
	
		
			967 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			967 B
		
	
	
	
		
			Go
		
	
	
	
	
	
// Copyright (c) HashiCorp, Inc.
 | 
						|
// SPDX-License-Identifier: MPL-2.0
 | 
						|
 | 
						|
//go:build memprofiler
 | 
						|
 | 
						|
package command
 | 
						|
 | 
						|
import (
 | 
						|
	"os"
 | 
						|
	"path/filepath"
 | 
						|
	"runtime"
 | 
						|
	"runtime/pprof"
 | 
						|
	"time"
 | 
						|
)
 | 
						|
 | 
						|
func init() {
 | 
						|
	memProfilerEnabled = true
 | 
						|
}
 | 
						|
 | 
						|
func (c *ServerCommand) startMemProfiler() {
 | 
						|
	profileDir := filepath.Join(os.TempDir(), "vaultprof")
 | 
						|
	if err := os.MkdirAll(profileDir, 0o700); err != nil {
 | 
						|
		c.logger.Debug("could not create profile directory", "error", err)
 | 
						|
		return
 | 
						|
	}
 | 
						|
 | 
						|
	go func() {
 | 
						|
		for {
 | 
						|
			filename := filepath.Join(profileDir, time.Now().UTC().Format("20060102_150405")) + ".pprof"
 | 
						|
			f, err := os.Create(filename)
 | 
						|
			if err != nil {
 | 
						|
				c.logger.Debug("could not create memory profile", "error", err)
 | 
						|
			}
 | 
						|
			runtime.GC()
 | 
						|
			if err := pprof.WriteHeapProfile(f); err != nil {
 | 
						|
				c.logger.Debug("could not write memory profile", "error", err)
 | 
						|
			}
 | 
						|
			f.Close()
 | 
						|
			c.logger.Debug("wrote memory profile", "filename", filename)
 | 
						|
			time.Sleep(5 * time.Minute)
 | 
						|
		}
 | 
						|
	}()
 | 
						|
}
 |