GO性能优化的一些记录:trace工具的使用

使用场景:

1 想要查看接口延时性偏高

2 深入了解协程具体如何运营的详细信息(运行时长,或者什么原因导致了协程运行受阻)

可以使用 trace 功能,程序便会对下面的一系列事件进行详细记录,并且会依据所搜集到的这些信息,生成能够以可视化方式查看的 trace 视图

1 协程的创建过程、开始运行的时刻以及结束运行的时间点。

2 协程由于系统调用、通道操作、锁的使用等情况而出现被阻塞的现象。

3 网络 IO 相关的操作情况。

4 垃圾收集的相关活动情况。

Go 复制代码
import (
    "net/http"
    _ "net/http/pprof"
)

func main() {
    _ := http.ListenAndServe(":8000", nil)
    
}


执行:curl "http://localhost:8000/debug/pprof/trace?seconds=30" > trace.out

如果不能使用http等进行访问 我们可以在程序内部运行

Go 复制代码
import (
    "runtime/trace"
)

func main() {
    // 创建trace文件
    f, _ := os.Create("trace.out")
  
    defer f.Close()

    if err := trace.Start(f); err != nil {
        return
    }
    defer trace.Stop()

    // 执行
}

执行: go tool trace trace.out

1 分析协程阻塞情况

2 处理器是否得到充分使用

协程运行时间、同步阻塞时间、系统调用阻塞时间、调度延迟时间、查看处理器的使用状况、垃圾回收(GC)占比

相关推荐
lolo大魔王8 分钟前
Go 后端实战|Gin + GORM V2 + MySQL 企业级 API 项目开发(完整版)
mysql·golang·gin
XMYX-022 分钟前
28 - Go JSON 数据操作
开发语言·golang·json
三*一25 分钟前
Mapbox GL JS 自研面要素整形工具开发实录
开发语言·javascript·arcgis·ecmascript
超级小星星1 小时前
C 语言结构体内存对齐深度解析:从概念到实战
c语言·开发语言
狮子座明仔1 小时前
AgentSPEX:当 Agent 框架开始把“控制流“从 Python 里抠出来
开发语言·python
笨笨饿2 小时前
74_SysTick滴答定时器中断
c语言·开发语言·人工智能·单片机·嵌入式硬件·算法·学习方法
无人不xiao2 小时前
springBoot 实现 接口进度条
java·spring boot·后端
IT_陈寒2 小时前
Redis缓存击穿把我坑惨了,原来这样解决才靠谱
前端·人工智能·后端
科芯创展2 小时前
XZ4058B/C,20V,外置MOS,8.4V/8.7V开关充电芯片 宽范围电源电压:8.9V~20V-(电池充电电压:8.4V/8.7V)
c语言·开发语言
AI玫瑰助手2 小时前
Python流程控制:break与continue语句的区别与应用
开发语言·python·信息可视化