前言
对于 pprof,相信熟悉 Go 语言的程序员基本都不陌生,一般线上的问题都是靠它可以快速定位。但是实际项目中,很多时候我们为了性能都不会开启它,但是出了问题又要靠它来分析。好在 go-zero 已经帮我们很好的集成进来了,我们只需要像开关一样去开启、关闭它即可,这样我们就可以配合运维监控,当出现 cpu、内存等异常情况时候,自动开始开启收集(比如大半夜你睡的正香的时候),那么第二天可以通过分析当时的采样还原现场,那我们看看 go-zero 是如何做的。
源码分析
我们可以看 go-zero 源码位置 https://github.com/zeromicro/go-zero/blob/master/core/proc/signals.go
func init() {
go func() {
...
signals := make(chan os.Signal, 1)
signal.Notify(signals, syscall.SIGUSR1, syscall.SIGUSR2, syscall.SIGTERM)
for {
v := <-signals
switch v {
...
case syscall.SIGUSR2:
if profiler == nil {
profiler = StartProfile()
} else {
profiler.Stop()
profiler = nil
}
...
}
}()
}
服务启动的时候,go-zero 在 init 初始化了监听信号操作(

本文介绍了如何利用Go语言的pprof进行线上问题排查,特别是在go-zero框架中如何集成和自动触发pprof收集,以便在内存、CPU异常时分析服务状态。通过线上实战案例展示了接收信号启动和停止pprof收集,以及如何使用pprof文件分析内存占用问题,最终实现了自动化问题现场保存的解决方案。
最低0.47元/天 解锁文章
8075

被折叠的 条评论
为什么被折叠?



