温馨提示×

Debian下Go性能如何监控

小樊
38
2026-08-23 17:42:35
栏目: 编程语言

在 Debian 系统下监控 Go 程序性能,通常可以从 操作系统层面Go 运行时层面应用层面 三个维度来做。下面给你一套比较实用、常用的方案。


一、操作系统层面(Debian / Linux)

1. top / htop

查看 CPU、内存、负载:

top
htop

关注:

  • CPU 使用率
  • RES / RSS 内存
  • 是否频繁 GC 导致 CPU 抖动

2. perf(Linux 性能分析神器)

适合分析 CPU 热点:

sudo apt install linux-perf
perf top -p <pid>

或采样:

perf record -p <pid>
perf report

✅ 适合定位 Go 程序 CPU 占用高 的问题


3. strace / lsof

分析系统调用和 IO:

strace -p <pid>
lsof -p <pid>

二、Go 运行时层面(最重要)

1. pprof(官方标准方案 ✅)

(1)在程序中开启 pprof

HTTP 服务(最常见):

import (
    _ "net/http/pprof"
    "net/http"
)

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

(2)CPU Profiling

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

常用命令:

top
list 函数名
web

✅ 定位:

  • 哪个函数吃 CPU
  • 是否死循环
  • 是否锁竞争

(3)内存 Profiling

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

关注:

  • alloc_space(累计分配)
  • inuse_space(当前占用)

(4)Goroutine 分析

curl http://localhost:6060/debug/pprof/goroutine?debug=2

重点看:

  • goroutine 数量是否持续增长
  • 是否阻塞在 channel / lock / network

2. runtime/metrics(Go 1.16+ 推荐)

runtime.MemStats 更底层、更完整:

import "runtime/metrics"

var sample = make([]metrics.Sample, len(metrics.All()))
metrics.Read(sample)

可监控:

  • GC 次数
  • GC pause
  • goroutine 数量
  • 内存分配速率

✅ 适合做 长期监控 & 告警


三、应用层面(业务指标)

1. Prometheus + Grafana(生产推荐 ✅)

常用 Go 客户端

go get github.com/prometheus/client_golang/prometheus

暴露指标:

http.Handle("/metrics", promhttp.Handler())

可监控:

  • QPS
  • 延迟
  • 错误率
  • goroutine 数量
  • GC pause

2. 自定义指标

例如:

  • 请求耗时
  • 队列长度
  • 缓存命中率
  • 数据库连接数

四、GC 与调度监控

1. GODEBUG=gctrace=1

GODEBUG=gctrace=1 ./myapp

输出示例:

gc 12 @3.456s 0%: 0.12+0.45+0.03 ms

关注:

  • GC 频率
  • STW 时间
  • 是否内存泄漏

2. 调度器监控(高级)

GODEBUG=schedtrace=1000 ./myapp

五、容器 / 云环境(如果在 Docker)

1. cgroup 限制

Debian + Docker 常见坑:

  • Go 看到的 CPU/Memory 是宿主机
  • 使用 Go 1.19+ 以支持 cgroup v2
go version

六、推荐组合(实战)

开发 / 排查

pprof + top + gctrace

生产环境

pprof(按需)
Prometheus + Grafana
runtime/metrics


七、快速排查清单

问题 工具
CPU 高 pprof profile / perf
内存涨 pprof heap
goroutine 泄漏 pprof goroutine
GC 频繁 gctrace
请求慢 trace / 自定义 metrics
系统瓶颈 top / strace / perf

如果你愿意,可以告诉我:

  • CPU 高 / 内存涨 / 响应慢
  • 是否 Docker / Kubernetes
  • Go 版本?

我可以给你更精确的监控和排查方案。

0