func pprofThread() { f, err := ioutil.TempFile("", "prof") if err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(2) } if err := pprof.StartCPUProfile(f); err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(2) } C.runCPUHogThread() t0 := time.Now() for C.getCPUHogThreadCount() < 2 && time.Since(t0) < time.Second { time.Sleep(100 * time.Millisecond) } pprof.StopCPUProfile() name := f.Name() if err := f.Close(); err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(2) } fmt.Println(name) }
func CgoPprofThread() { runtime.SetCgoTraceback(0, unsafe.Pointer(C.pprofCgoThreadTraceback), nil, nil) f, err := ioutil.TempFile("", "prof") if err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(2) } if err := pprof.StartCPUProfile(f); err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(2) } t0 := time.Now() for C.getCPUHogThreadCount() < 2 && time.Since(t0) < time.Second { time.Sleep(100 * time.Millisecond) } pprof.StopCPUProfile() name := f.Name() if err := f.Close(); err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(2) } fmt.Println(name) }