1234567891011121314151617181920212223242526272829303132333435 |
- // +build linux darwin
- package proc
- import (
- "fmt"
- "os"
- "path"
- "runtime/pprof"
- "syscall"
- "time"
- "github.com/tal-tech/go-zero/core/logx"
- )
- const (
- goroutineProfile = "goroutine"
- debugLevel = 2
- )
- func dumpGoroutines() {
- command := path.Base(os.Args[0])
- pid := syscall.Getpid()
- dumpFile := path.Join(os.TempDir(), fmt.Sprintf("%s-%d-goroutines-%s.dump",
- command, pid, time.Now().Format(timeFormat)))
- logx.Infof("Got dump goroutine signal, printing goroutine profile to %s", dumpFile)
- if f, err := os.Create(dumpFile); err != nil {
- logx.Errorf("Failed to dump goroutine profile, error: %v", err)
- } else {
- defer f.Close()
- pprof.Lookup(goroutineProfile).WriteTo(f, debugLevel)
- }
- }
|