gops 组件
把 google/gops 封装成组件,在进程内暴露 Go 运行时诊断信息(goroutine 栈、内存统计、GC 情况),供线上排查问题。
安装
bash
go get github.com/cherry-game/components/gops@latest注册组件
go
import (
"github.com/cherry-game/cherry"
cherryGops "github.com/cherry-game/components/gops"
"github.com/google/gops/agent"
)
func main() {
app := cherry.Configure("./config/profile.json", "gc-gate-1", false, cherry.Cluster)
// 默认配置
app.Register(cherryGops.New())
app.Startup()
}需要自定义监听地址时传 agent.Options:
go
app.Register(cherryGops.New(agent.Options{
Addr: "0.0.0.0:0",
ShutdownCleanup: true,
}))New() 只取第一个 agent.Options。
组件没有配置节点——参数全部通过代码传入。
使用 gops CLI 诊断
组件启动后,用 gops 命令行工具连上进程:
bash
# 安装
go install github.com/google/gops@latest
# 列出本机所有被 gops 托管的进程
gops
# 查看 goroutine 栈
gops stack <PID>
# 查看内存统计
gops memstats <PID>
# 查看 GC 情况
gops gc <PID>
# 实时查看运行时统计(每 1 秒刷新)
gops stats <PID>线上排查的典型用法
服务疑似 goroutine 泄漏时,连续几次 gops stack <PID> 看栈里哪一类调用在持续堆积;CPU 或内存异常时用 gops memstats 配合 gops stats 观察。
API
| 方法 | 说明 |
|---|---|
New(options ...agent.Options) *Component | 创建组件 |
组件名 gops_component。生命周期里 Init() 调用 agent.Listen(options) 启动监听,OnStop() 目前是空实现。
生产环境的暴露面
gops 会在本机监听一个端口并允许读取运行时信息,不要把它暴露到公网。默认监听 127.0.0.1 上的随机端口,保持默认即可;确需远程访问请通过 SSH 隧道,而不是绑到 0.0.0.0。