main函数接收参数
1 | import ( |
golang profile的使用方法
代码中添加如下代码:
1
2
3
4
5
6
7
8
9import (
_ "net/http/pprof" //采集 HTTP Server 的运行时数据进行分析
)
func main() {
go func() {
addr := fmt.Sprintf(":%d", 8090)
http.ListenAndServe(addr, nil)
}()
}编译pprof
1
2git clone https://github.com/google/pprof.git
go build
编译命令请参考 https://github.com/google/pprof/blob/master/appveyor.yml
编译go-torch
1
https://github.com/uber-archive/go-torch
火焰图生成命令:
cpu 使用火焰图:
1
go-torch -u http://127.0.0.1:4500
mem 火焰图:
– –inuse_space 分析常驻内存:1
go-torch -inuse_space http://127.0.0.1:4500/debug/pprof/heap --colors=mem
– –alloc_space 分析程序启动以来所有分配的内存1
go-torch -alloc_space http://127.0.0.1:4500/debug/pprof/heap --colors=mem
- 不用火焰图,分析cpu、mem使用
–inuse_space 分析常驻内存:
1
go tool pprof -inuse_space http://127.0.0.1:4500/debug/pprof/heap
–alloc_space 分析程序启动以来分配的所有内存:
1
go tool pprof -alloc_space http://127.0.0.1:4500/debug/pprof/heap
分析cpu 热点代码
1
go tool pprof http://127.0.0.1:4500/debug/pprof/profile
- 一些显示项的含义
- flat代表的是该函数自身代码的执行时长;
- cum代表的是该函数自身代码+所有调用的函数的执行时长;
- flat%和cum%指的就是flat耗时和cum耗时占总耗时的百分比;
- sum%指的就是每一行的flat%与上面所有行的flat%总和,代表从上到下的累计值;
- 参考链接:
- https://golang.org/pkg/net/http/pprof/
- https://golang.org/doc/diagnostics.html?h=flamegraph
- https://github.com/google/pprof
- http://io.upyun.com/2018/01/21/debug-golang-application-with-pprof-and-flame-graph/
- https://www.jianshu.com/p/162f44022eb7
- http://blog.sina.com.cn/s/blog_48c95a190102xtse.html
判断某个时间是否在某个时间区间之内
注意判断边界条件,比如: “2019-09-25 15:40:45” 并不在 “2019-09-25 15:40:45” 与 “2019-09-25 15:40:46”之间。
1 | package main |
Golang通过GOTRACEBACK生成程序崩溃后core文件
方法1:1
export GOTRACEBACK=crash
eg:1
2export GOTRACEBACK=crash
nohup ${LIMIT} ${BIN_DIR}/proxy ${CONFIG_PARAM} -log ${LOG_DIR}/${PROXY_LOG} 1>>${LOG_DIR}/${PROXY_LOG} 2>&1 </dev/null &
方法2:1
nohup env GOTRACEBACK=crash
eg:1
/usr/bin/nohup env GOTRACEBACK=crash /home/work/goworkpace/bin/main >> /home/work/goworkpace/log/crash.log