IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    使用 GOTRACEBACK 快速定位你的 Panic

    Debug客栈发表于 2024-09-09 19:22:48
    love 0
    Featured image of post 使用 GOTRACEBACK 快速定位你的 Panic

    近期迁移了一个 go 的项目至 k8s 机器上,发现机器不时会自动重启,当想看重启前日志的时候,Goroutine 运行的状态全部都打印了出来,由于公司云平台查看行数限制,看到最后,还是没有想要看到的 panic 的关键堆栈信息。

    前期,由于频繁的重启,怀疑是哪里出现了未捕获的 panic 导致的,于是在使用的第三方包 RocketMQ 和 Talos 等 SDK 包进行了生产消费初始化的 recover 并且对项目中 channel 的关键操作中也添加了 recover 捕获,但是并没有解决问题,还是时不时的出现重启。

    在查找 Go 官方文档,发现可以设置这个环境变量 GOTRACEBACK 可以控制 panic 发生后堆栈跟踪的打印级别。

    GOTRACEBACK

    Go 运行时使用该环境变量来决定在程序崩溃或出现未处理的 panic 时应该输出多少堆栈跟踪信息,它是在运行 Go 程序时通过环境变量传递给 Go 运行时的。

    • none 当程序崩溃时,不输出任何堆栈信息;
    • single 仅显示导致崩溃,出现 panic 的 goroutine 的堆栈信息;
    • all 显示所有的 goroutine 的堆栈信息;
    • system 显示所有的 goroutine 的堆栈信息,包括运行时内部 goroutine 的信息;
    • crash 显示所有的 goroutine 的堆栈信息,然后核心转储程序并退出;

    runtime package - runtime - Go Packages



沪ICP备19023445号-2号
友情链接