温馨提示×

centos怎样定位golang报错

小樊
48
2026-09-27 07:16:03
栏目: 编程语言

在 CentOS 上定位 Golang 报错,通常可以按下面几个层次来做:编译期错误、运行期 panic、日志与崩溃、性能/阻塞问题。下面给你一套实战流程。


一、编译期报错(go build / go install)

1. 直接看编译器输出

go build -x -v ./...
  • -x:打印实际执行的命令
  • -v:显示正在编译的包

2. 常见定位方式

  • 看 文件路径 + 行号
  • 用 grep 快速定位代码
grep -Rn "报错关键字" .

3. 检查环境与版本

go version
go env

常见问题:

  • GOPATH / GO111MODULE 设置错误
  • CentOS 自带旧版 Go

二、运行期 panic(最常见)

1. 运行程序

./your_app

或

go run main.go

2. 看 panic 信息重点

panic: runtime error: invalid memory address or nil pointer dereference
goroutine 1 [running]:
main.main()
    /opt/app/main.go:23 +0x45

✅ 重点看:

  • panic: 原因
  • goroutine
  • 最上面的 main.go:行号

3. 开启更详细信息

export GOTRACEBACK=all
./your_app

可看到 所有 goroutine 栈


三、程序崩溃 / 无输出(CentOS 服务)

情况 1:systemd 服务

systemctl status your_service
journalctl -u your_service -n 100 --no-pager

情况 2:core dump

ulimit -c unlimited

程序崩溃后:

ls -lh core*

用 gdb 分析:

yum install gdb
gdb ./your_app core.xxx

四、日志定位(强烈推荐)

1. 使用标准日志

import "log"

log.SetFlags(log.LstdFlags | log.Lshortfile)
log.Println("进入处理函数")

2. 使用 zap / logrus(生产推荐)

logger.Error("db query failed", zap.Error(err))

3. 在 CentOS 查看日志

tail -f /var/log/your_app.log

五、goroutine 泄漏 / 卡死

1. 开启 pprof(非常关键)

import _ "net/http/pprof"

go func() {
    http.ListenAndServe("0.0.0.0:6060", nil)
}()

查看:

go tool pprof http://localhost:6060/debug/pprof/goroutine

2. 常见症状

  • CPU 高
  • 内存涨
  • 请求无响应

六、CentOS 特有坑(重点)

1. glibc 版本问题

ldd ./your_app

报错:

version `GLIBC_2.28' not found

✅ 解决:

  • 在 CentOS 7 上静态编译
CGO_ENABLED=0 go build

2. SELinux 导致启动失败

getenforce
setenforce 0  # 临时关闭

3. 防火墙

firewall-cmd --list-ports

七、快速排查清单(建议收藏)

go version
go env
systemctl status xxx
journalctl -u xxx -n 200
export GOTRACEBACK=all
./app
tail -f /var/log/app.log

如果你愿意,可以把:

  • 完整报错信息
  • CentOS 版本
  • Go 版本
  • 运行方式(二进制 / systemd / docker)

贴出来,我可以直接帮你精确定位问题。

0 踩