gops - Go語言程序查看和診斷工具

想必 Java 的開發者沒有不知道或者沒用過 jps 這個命令的,這個命令是用來在主機上查看有哪些 Java 程序在運行的。html

我剛用 Go 語言程序的時候也很苦惱,我部署在公司服務器上的 Go 程序,其餘的同事因爲不清楚就常常找不到。git

那麼 Go 語言有沒有像 jps 這樣的工具呢?固然有,不只有,並且仍是 Google 本身出品的,官方認證(這種問題 Google 不可能本身想不到啊)。名稱也跟 jps 很像,叫 gopsgithub

安裝

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-cpugops pprof-heap 等命令。(stack, gc, setgc, memstats, version, stats, trace 等命令運行一樣須要加入上面的代碼)。google

使用很簡單,就直接貼一點圖,不講了。

由於 go pprof 命令有助於咱們分析程序,相對來講更加經常使用。可是以往用起來相對要麻煩一些(可參照本人另外一篇《Go 程序的性能優化及 pprof 的使用》)。如今有了 gops,分析 cpu 和內存使用就跟方便了。

gops 不只支持本地使用,並且支持遠程。查看 agent.Options:

能夠設置 Addrhost:port 形式。我這邊設置爲 ":9779"。將其部署到遠程服務器上,運行命令 gops pprof-heap 192.168.199.210:9779,能夠看到:

徹底可行。(注意,不只只有 pprof-heap,gops 全部命令都支持遠程

在咱們的程序中加入診斷用代碼,當部署到遠程服務器上,也能很方便地分析程序狀況。

相關文章
相關標籤/搜索