在 CentOS 上定位 Golang 报错,通常需要看错误来源(编译期 / 运行期),再结合日志、调试工具、系统环境一步步排查。下面给你一套实用思路。
特征:
cannot find package、undefined、syntax error常见原因:
排查:
go env
go version
go build -x # 看详细编译过程
特征:
典型例子:
panic: runtime error: invalid memory address
./your_app 2>&1 | tee run.log
重点看:
panicgoroutineexport GODEBUG=allocfreetrace=1
export GOTRACEBACK=all
运行时能看到更完整的 goroutine 栈。
CentOS 上 OOM(内存溢出) 很常见:
dmesg | grep -i kill
dmesg | grep -i oom
如果你看到:
Out of memory: Kill process xxx (your_app)
说明不是 Go 报错,是系统杀的。
CentOS 7 默认 glibc 2.17,某些新 Go 程序会报:
version `GLIBC_2.28' not found
解决:
ldd your_app
strings /lib64/libc.so.6 | grep GLIBC
报错可能很隐蔽:
getenforce
tail -f /var/log/audit/audit.log
临时验证:
setenforce 0
netstat -tunlp | grep 端口
ls -l 日志目录
go install github.com/go-delve/delve/cmd/dlv@latest
dlv exec ./your_app
import _ "net/http/pprof"
go tool pprof http://localhost:6060/debug/pprof/goroutine
ulimit -c unlimited
GOTRACEBACK=crash ./your_app
然后用:
gdb ./your_app core
go version
go env
dmesg | tail -50
journalctl -xe
ldd your_app
getenforce
你可以贴:
我可以直接告诉你最可能的原因和修复命令。