Skip to content

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。