gops

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 pid到gops 127.0.0.1:port的转换。



如果代码中通过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



Category golang