温馨提示×

如何定位centos golang慢日志

小樊
35
2026-09-21 09:42:46
栏目: 编程语言

在 CentOS 上“定位 Golang 慢日志”,通常分几种场景。下面按最常见需求给你一套实用思路和命令。


一、先明确:你说的“慢日志”是哪种?

1️⃣ Web 服务请求慢(HTTP 慢请求)

例如 Gin / Echo / net/http 接口响应慢

✅ 解决方案:在代码里加慢请求日志(中间件)

Gin 示例(推荐)

func SlowLogMiddleware() gin.HandlerFunc {
    return func(c *gin.Context) {
        start := time.Now()
        c.Next()
        cost := time.Since(start)
        if cost > 200*time.Millisecond {
            log.Printf("[SLOW] %s %s cost=%s", c.Request.Method, c.Request.URL.Path, cost)
        }
    }
}

CentOS 上运行:

./your_app 2>&1 | tee app.log
grep SLOW app.log

2️⃣ 数据库慢(MySQL / PostgreSQL)

Golang 本身不记录慢 SQL,需要:

✅ MySQL 慢日志(CentOS)

vim /etc/my.cnf
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 0.5

重启:

systemctl restart mysqld

查看:

less /var/log/mysql/slow.log

3️⃣ Go 程序整体卡顿(CPU / GC / 阻塞)

用 pprof(最专业)

代码中开启

import _ "net/http/pprof"

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

CentOS 上采集

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

分析:

top
web

4️⃣ 系统级慢(磁盘 / IO / 网络)

CentOS 常用排查命令:

top
htop
iotop
netstat -antp | grep ESTABLISHED
df -h
dmesg | tail

二、生产环境推荐组合(实战)

✅ Web 服务

  • 慢请求中间件
  • 日志写入文件(logrotate)

✅ 数据库

  • MySQL slow log
  • SQL 超时设置

✅ Go 程序

  • pprof
  • runtime/trace

三、如果你能补充这些信息,我可以更精准帮你

  1. 是 HTTP 接口慢 还是 任务慢?
  2. 用的框架(Gin / echo /原生)?
  3. 是否有数据库?
  4. CentOS 版本(7 / 8 / Stream)?

我可以直接给你可复制的慢日志方案。

0 踩