func main() {
runtime.SetCPUProfileRate(500)
cpuProfiler := "profile.prof"
f, _ := os.Create(cpuProfiler)
if err := pprof.StartCPUProfile(f); err != nil {
log.Fatal("could not start CPU profile: ", err)
}
defer pprof.StopCPUProfile()
c := make(chan os.Signal, 2)
signal.Notify(c, os.Interrupt, syscall.SIGTERM)
onKill := func(c chan os.Signal) {
select {
case <-c:
defer f.Close()
defer pprof.StopCPUProfile()
defer os.Exit(0)
}
}
go onKill(c)
streamCAN, streamIMU, done := mainfunctions.DialUpConnection(logger, configread.GetString("library.development.grpctarget"))
rawCANData := mainfunctions.GetCANDataFromStream(logger, done, streamCAN)
rawIMUData := mainfunctions.GetIMUDataFromStream(logger, done, streamIMU)
moduleData := mainfunctions.DistributeDataFromStream(logger, done, rawCANData, rawIMUData)
log.Debug(moduleData)
mainfunctions.DistributeDataFromStream(logger, done, rawCANData, rawIMUData)
channelOut := mainfunctions.RunAlgos(logger, done, moduleData)
log.Debug(channelOut)
mainfunctions.ReturnDataToStream(logger, done, channelOut)
// subscribe to system signals
}
pprof の出力を比較する必要がある go-app があります。関数でその目的のためにmain
、 を作成しcpuProfiler
て開始します。終了のシグナルを追跡する go ルーチンがあります。その後、infinitely
入力を使用して中断されない限り、実行中の機能を起動します(キーボードの割り込みがない限り、アプリは無限に実行されます)。指定された pprof ファイルにメタをキャプチャすることを期待して、アプリをしばらく実行しましたが、そのファイルは常に空です。を呼び出してプロファイリングを終了することに注意してくださいstopCPUProfile
。
私は何を間違っていますか?
前もって感謝します。