V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
nomansky
V2EX  ›  Go 编程语言

运行中的 go 进程中某个函数偶尔出现执行慢的情况,怎么跟踪堆栈调用?

  •  
  •   nomansky · 2020-10-23 10:14:31 +08:00 · 1994 次点击
    这是一个创建于 1502 天前的主题,其中的信息可能已经有所发展或是发生改变。
    一个在 production 环境运行的进程,不可能修改代码,日志记录的也不详细,不定时出现某个函数执行慢的情况,gops,pprof 等都需要在代码中实现 agent 才能 profiling 和 tracing 。有没有大佬了解有什么工具可以不需要 agent 跟踪正在运行的程序的堆栈调用?
    12 条回复    2020-10-23 13:17:16 +08:00
    JeromeCui
        1
    JeromeCui  
       2020-10-23 10:20:49 +08:00
    我就会一招:打印日志
    nomansky
        2
    nomansky  
    OP
       2020-10-23 10:24:38 +08:00
    @JeromeCui 我也想,没办法打印...
    lcode
        3
    lcode  
       2020-10-23 10:38:49 +08:00
    测试环境模拟一下
    不能复现的 bug 就不是 bug (
    zunceng
        4
    zunceng  
       2020-10-23 10:45:31 +08:00   ❤️ 1
    http 框架里面集成一个 pprof 中间件 做好了以后一行代码就好了 如果是 gin 直接用下面的
    https://github.com/gin-contrib/pprof
    monsterxx03
        5
    monsterxx03  
       2020-10-23 10:50:16 +08:00
    https://github.com/monsterxx03/gospy

    可以不改代码打印正在跑的 goroutine, 不过好像并不能帮你调试某个函数慢的问题
    polythene
        6
    polythene  
       2020-10-23 10:52:19 +08:00
    Linux 下的 perf 能直接读取 Go 进程的符号值
    TypeErrorNone
        7
    TypeErrorNone  
       2020-10-23 10:56:02 +08:00
    @zunceng 如果有几十个容器,怎么搞呢
    airplayxcom
        8
    airplayxcom  
       2020-10-23 11:15:12 +08:00
    kiddingU
        9
    kiddingU  
       2020-10-23 11:47:17 +08:00
    opentracing 可以定位到是链路中哪个函数慢,然后再去优化
    Lonenso
        10
    Lonenso  
       2020-10-23 12:20:04 +08:00 via Android
    Leigg
        11
    Leigg  
       2020-10-23 12:27:06 +08:00 via Android
    你不能确定函数范围?没上链路追踪就自己挨个打日志
    zunceng
        12
    zunceng  
       2020-10-23 13:17:16 +08:00
    @TypeErrorNone 一般来说不会把这个接口暴露出去 想个办法内部访问
    如果程序部署在 k8s
    kubectl run my-shell --rm -i --tty --image golang -- sh
    > go tools pprof http://${pod_name}/debug/pprof/heap
    在生产创建 pod 的权限非常高 对权限管控有要求的企业 可以把这一套做成一个线上的调试工具 web 方式提供给内部人员使用
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1079 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 22:27 · PVG 06:27 · LAX 14:27 · JFK 17:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.