gops 是Go团队提供的命令行工具,它可以用来获取go进程运行时信息。
可以查看:
当前有哪些go语言进程,哪些使用gops的go进程
进程的概要信息
进程的调用栈
进程的内存使用情况
构建程序的Go版本
运行时统计信息
可以获取:
trace
cpu profile和memory profile
还可以:
让进程进行1次GC
设置GC百分比
https://lessisbetter.site/2020/03/15/gops-introduction/
“github.com/google/gops/agent”
gops原理
gops的原理是,代码中导入gops/agent,建立agent服务,gops命令连接agent读取进程信息。
agent的实现原理可以查看agent/handle函数。
使用go标准库中原生接口实现相关功能,如同你要在自己的程序中开启pprof类似,只不过这部分功能由gops/agent实现了:
使用runtime.MemStats获取内存情况
使用runtime/pprof获取调用栈、cpu profile和memory profile
使用runtime/trace获取trace
使用runtime获取stats信息
使用runtime/debug、GC设置和启动GC
再谈ConfigDir。从源码上看,ConfigDir对agent并没有用途,对gops有用。当gops和ConfigDir在一台机器上时,即gops查看本机的go进程信息,gops可以通过其中的文件,快速找到agent服务的端口。能够实现:gops
如果代码中通过ConfigDir指定了其他目录,使用gops时,需要添加环境变量GOPS_CONFIG_DIR指向ConfigDir使用的目录。
子命令介绍
gops后面可以跟子命令,然后是pid或者远端地址。
也可以直接跟pid,查看本机进程信息。
https://github.com/google/gops
https://segmentfault.com/a/1190000016412013
https://golang.org/pkg/net/http/pprof/#pkg-overview