吴坤亮的技术专栏 Inspiring to become a full stack engineer

go pprof trace

2018-08-30
wkl

阅读:

go

关于火焰图与trace的使用

go-torch appBin test.prof test.svg

go tool trace -http=x.x.x.x:8888 trace.trace

go tool pprof *.prof

http://lihaoquan.me/2017/1/1/Profiling-and-Optimizing-Go-using-go-torch.html

package prof

import (
	"os"
	"log"
	_ "net/http"
	"runtime/pprof"
	"runtime/trace"
	_ "net/http/pprof"
)


var CpuProf *os.File
var MemProf *os.File
var TraceProf *os.File
var StartProfChan = make(chan uint32, 1)
var StopProfChan = make(chan uint32, 1)
var StartTraceChan = make(chan uint32, 1)
var StopTraceChan = make(chan uint32, 1)

func SetStartProf() {
	StartProfChan <- 1
}
func SetStopProf() {
	StopProfChan <- 1
}

func SetStartTrace() {
	StartTraceChan <- 1
}
func SetStopTrace() {
	StopTraceChan <- 1
}
func StartTrace() {
	var errTrace error
	for {
		<-StartTraceChan
		TraceProf, errTrace = os.Create("./trace.trace")
		if errTrace != nil {
			log.Fatal(errTrace)
		}
		trace.Start(TraceProf)
	}
}

func StopTrace() {
	for {
		<-StopTraceChan
		trace.Stop()
	}
}

func StartProf() {
	var errCPU, errMEM error
	for {
		<-StartProfChan
		CpuProf, errCPU = os.OpenFile("./cpu.prof", os.O_RDWR|os.O_CREATE, 0644)
		if errCPU != nil {
			log.Fatal(errCPU)
		}
		MemProf, errMEM = os.Create("./mem.prof")
		if errMEM != nil {
			log.Fatal(errMEM)
		}
		pprof.StartCPUProfile(CpuProf)
	}
}

func StopProf() {
	for {
		<-StopProfChan
		pprof.StopCPUProfile()
		CpuProf.Close()
		pprof.WriteHeapProfile(MemProf)
		MemProf.Close()
	}
}

上一篇 uml

Comments

Content