GOTRACEBACK 的作用与级别
GOTRACEBACK 决定了程序崩溃时输出的堆栈信息详细程度,支持以下级别配置:
- none 仅输出崩溃的异常信息,不显示任何 goroutine 堆栈
- single 显示引发 panic 的当前 goroutine 堆栈(默认值)
- all 输出所有用户创建的 goroutine 堆栈(排除 runtime 内部)
- system 输出所有 goroutine 的堆栈,包括 runtime 内部创建的(如 GC 相关)
- crash 在 system 基础上生成 coredump 文件,用于后续调试
使用方法
配置
开启crash前需要将ulimit -c 配置为
1 | ulimit -c unlimited |
要永久生效需要修改 /etc/security/limits.conf,增加
1 | # root是用户名,对全部用户生效使用 * ,修改可以使用su 切换下用户,使用ulimit -c查看是否生效 |
ubuntu 配置 * 时su切换用户不能立即生效可能需要重启系统,配置指定用户如 you_user_name 可以
使用
1 | # 示例:输出所有 goroutine 堆栈并生成 coredump |
结合supervisor使用
1 | [program:your_program] |
修改supervisor配置后需要使用命令加载配置并重启程序
1 | sudo supervisorctl reread |
最佳实践
生产环境建议:设置 GOTRACEBACK=crash 以生成 coredump,配合日志和监控工具定位问题。
调试场景:使用 system 级别获取完整堆栈,快速定位并发或 runtime 相关问题。
资源管理:确保服务器有足够磁盘空间存储 coredump 文件(尤其是高频崩溃场景)。
通过合理配置 GOTRACEBACK 并结合其他工具链,可以有效捕获和分析 Go 程序的崩溃日志,提升系统稳定性。
Related Issues not found
Please contact @yiGmMk to initialize the comment