想必 Java 的开发者没有不知道或者没用过 jps 这个命令的,这个命令是用来在主机上查看有哪些 Java 程序在运行的。html
我刚用 Go 语言程序的时候也很苦恼,我部署在公司服务器上的 Go 程序,其余的同事因为不清楚就常常找不到。git
那么 Go 语言有没有像 jps 这样的工具呢?固然有,不只有,并且仍是 Google 本身出品的,官方认证(这种问题 Google 不可能本身想不到啊)。名称也跟 jps 很像,叫 gops。github
gops 并不包含在官方安装包中,不属于标准工具。须要手动获取。性能优化
go get -u github.com/google/gops
goes 的使用方法很是简单,咱们看一下 help 文档就能够了。bash
最简单的用法就是 gops
,会直接列出正在运行的 Go 程序服务器
会依次列出 PID,PPID,程序名称,编译使用的 Go 版本号,程序路径。信息比 jps 还详细,不错哦。工具
不止如此,gops 还能进行程序的诊断。性能
可能有人注意到了上面个人 memory-test 程序后面有个 *
号。这是由于程序中我加入了 gops 用的诊断支持代码:优化
if err := agent.Listen(agent.Options{ShutdownCleanup:true}); err != nil { log.Fatalln(err) }
对于这样的程序,咱们才能进行 gops pprof-cpu
和 gops pprof-heap
等命令。(stack
, gc
, setgc
, memstats
, version
, stats
, trace
等命令运行一样须要加入上面的代码)。google
使用很简单,就直接贴一点图,不讲了。
由于 go pprof
命令有助于咱们分析程序,相对来讲更加经常使用。可是以往用起来相对要麻烦一些(可参照本人另外一篇《Go 程序的性能优化及 pprof 的使用》)。如今有了 gops,分析 cpu 和内存使用就跟方便了。
gops 不只支持本地使用,并且支持远程。查看 agent.Options
:
能够设置 Addr
为 host:port
形式。我这边设置为 ":9779"
。将其部署到远程服务器上,运行命令 gops pprof-heap 192.168.199.210:9779
,能够看到:
彻底可行。(注意,不只只有 pprof-heap
,gops 全部命令都支持远程)
在咱们的程序中加入诊断用代码,当部署到远程服务器上,也能很方便地分析程序状况。