goroutine
,每个gorouine
执行不同的任务,有部分是高并发的业务针对延迟非常敏感,每个协程的资源分配情况以及每个协程调度情况,当前整个进程的runtime
情况,通过调试很难分析。目前可以通过go trace
工具来分析整个main
的执行情况。package main
import (
"fmt"
"os"
"runtime/trace"
)
func business_func() {
fmt.Println("do self business")
}
func main() {
file, err := os.Create("./trace.dat")
if err != nil {
panic(err)
}
/******业务代码开始*********/
business_func()
/******业务代码结束*********/
trace.Start(file)
fmt.Println("start trace")
trace.Stop()
defer file.Close()
}
[perrynzhou@ubuntu-dev ~/schedule]$ go build
[perrynzhou@ubuntu-dev ~/schedule]$ ls
go.mod schedule trace.go
[perrynzhou@ubuntu-dev ~/schedule]$ ./schedule
start trace
[perrynzhou@ubuntu-dev ~/schedule]$ ls -l
total 1780
-rw-rw-r-- 1 perrynzhou perrynzhou 25 May 6 08:52 go.mod
-rwxrwxr-x 1 perrynzhou perrynzhou 1809003 May 6 08:58 schedule
-rw-rw-r-- 1 perrynzhou perrynzhou 1601 May 6 08:58 trace.dat
-rw-rw-r-- 1 perrynzhou perrynzhou 225 May 6 08:57 trace.go
[perrynzhou@ubuntu-dev ~/schedule]$
goroutine
http://127.0.0.1:62483