温馨提示×

怎样用debian查golang慢日志

小樊
49
2026-09-25 10:58:52
栏目: 编程语言

在 Debian 上“查 Golang 慢日志”通常分两种情况,我分别说明,你可以按需选择。


一、如果你说的是「Golang 程序自身的慢日志(比如 HTTP / 数据库慢查询)」

Go 本身没有像 MySQL 那样的慢日志机制,慢日志一般是:

  • 自己打日志
  • 或用第三方库 / 中间件

1️⃣ HTTP 接口慢请求日志(最常见)

方式一:用中间件记录耗时(推荐)

func LoggingMiddleware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        start := time.Now()
        next.ServeHTTP(w, r)
        cost := time.Since(start)

        if cost > 500*time.Millisecond {
            log.Printf("[SLOW] %s %s took %s", r.Method, r.URL.Path, cost)
        }
    })
}

启动服务:

go run main.go >> /var/log/myapp.log 2>&1

查看慢日志:

grep SLOW /var/log/myapp.log

2️⃣ 数据库慢查询(以 MySQL 为例)

Go 里常用 database/sql + mysql 驱动:

db.SetConnMaxLifetime(time.Minute)
db.SetMaxOpenConns(10)

但真正的慢日志在 MySQL 端:

sudo vi /etc/mysql/my.cnf
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1

重启:

sudo systemctl restart mysql

查看:

sudo less /var/log/mysql/slow.log

二、如果你说的是「Debian 系统层面,Go 程序跑得慢,怎么排查」

1️⃣ 看进程是否 CPU / IO 慢

top
htop
iotop

找 go 或你的程序名


2️⃣ 用 Go 自带的 pprof(非常推荐)

代码中开启:

import _ "net/http/pprof"

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

采集 30 秒 CPU:

go tool pprof http://127.0.0.1:6060/debug/pprof/profile?seconds=30

查看耗时函数:

(pprof) top
(pprof) web

3️⃣ 用 strace 看系统调用慢(底层)

sudo strace -f -tt -T -p <pid>

可看到哪个 read/write/network 调用慢


三、总结(快速选择)

场景 方法
HTTP 慢 中间件记日志
DB 慢 MySQL slow log
程序卡 pprof
系统级慢 top / strace

如果你能具体说一下:

  • 是 Web 服务?CLI?数据库?
  • 慢在哪一步(接口 / 启动 / 计算)

我可以直接给你一份可用的 Debian + Go 慢日志方案。

0 踩