在 CentOS 上“查 Golang 慢日志”,要看你说的慢日志是什么类型,常见有下面几种情况。我按最常见场景给你讲。
Go 自带性能分析工具。
import _ "net/http/pprof"
import "net/http"
go func() {
http.ListenAndServe("0.0.0.0:6060", nil)
}()
# 查看 30 秒 CPU 占用
go tool pprof http://localhost:6060/debug/pprof/profile?seconds=30
常用命令:
top
list 函数名
web
cpu → 哪段代码耗时goroutine → 是否阻塞block / mutex → 锁竞争比如请求超过 500ms 就记日志:
start := time.Now()
handler()
cost := time.Since(start)
if cost > 500*time.Millisecond {
log.Printf("SLOW: %s cost=%s", r.URL.Path, cost)
}
日志位置看你程序配置,一般在:
/var/log/xxx.log
func SlowLog() gin.HandlerFunc {
return func(c *gin.Context) {
start := time.Now()
c.Next()
if time.Since(start) > 500*time.Millisecond {
log.Printf("SLOW %s %s %s",
c.Request.Method,
c.Request.URL.Path,
time.Since(start))
}
}
}
top
htop
uptime
ps -ef | grep go
strace -p 进程ID
iostat -x 1
如果是 Go 调 MySQL 慢:
slow_query_log = 1
long_query_time = 1
cat /var/log/mysql/slow.log
| 场景 | 方法 |
|---|---|
| 代码慢 | pprof |
| 接口慢 | 中间件记慢日志 |
| 系统慢 | top / iostat |
| 数据库慢 | MySQL 慢日志 |
如果你愿意,可以告诉我:
我可以直接给你一套可复制的配置和代码。