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

来源:http://www.cnblogs.com/snowInPluto/archive/2017/11/05/7785651.html
-Advertisement-
Play Games

想必 Java 的開發者沒有不知道或者沒用過 jps 這個命令的,這個命令是用來在主機上查看有哪些 Java 程式在運行的。 我剛用 Go 語言程式的時候也很苦惱,我部署在公司伺服器上的 Go 程式,其他的同事由於不清楚就經常找不到。 那麼 Go 語言有沒有像 jps 這樣的工具呢?當然有,不僅有, ...


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

我剛用 Go 語言程式的時候也很苦惱,我部署在公司伺服器上的 Go 程式,其他的同事由於不清楚就經常找不到。

那麼 Go 語言有沒有像 jps 這樣的工具呢?當然有,不僅有,而且還是 Google 自己出品的,官方認證(這種問題 Google 不可能自己想不到啊)。名稱也跟 jps 很像,叫 gops

安裝

gops 並不包含在官方安裝包中,不屬於標準工具。需要手動獲取。

go get -u github.com/google/gops

簡單使用

goes 的使用方法非常簡單,我們看一下 help 文檔就可以了。

最簡單的用法就是 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 等命令運行同樣需要加入上面的代碼)。

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

因為 go pprof 命令有助於我們分析程式,相對來說更加常用。但是以往用起來相對要麻煩一些(可參照本人另一篇《Go 程式的性能優化及 pprof 的使用》)。現在有了 gops,分析 cpu 和記憶體使用就跟方便了。

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

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

完全可行。(註意,不僅只有 pprof-heap,gops 所有命令都支持遠程

在我們的程式中加入診斷用代碼,當部署到遠程伺服器上,也能很方便地分析程式情況。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 2.1 自定義類庫 自定義類庫能封裝核心代碼,保證核心的代碼在交付給客戶時,不讓客戶泄露,同時也防止非專業人士的私自更改。另外能提高程式代碼的復用率,使得代碼量減少,程式結構簡潔。自定義類庫就是程式中常見的.dll文件。 新建一個people的自定義類庫,其實吧,就和java中的導包一樣的。 類庫和 ...
  • 里氏轉換: Person p=new Student(); 如果說子類可以賦值給父類 那我們應該聲明一個父類類型去指向子類對象 如果說父類中裝的是子類對象 可以考慮將父類強轉為子類對象用 is 轉換成功返回 true as 轉換成功返回對應的對象 來接收ss students ss =p as st ...
  • 工作上的JS代碼就沒必要截圖了,只是簡單的做一下筆記,以後如果還需要類似的運用也能快速提醒最近 前臺顯示 地址信息大家存儲的都是編號,這個比較簡單,不好意思寫太細節,直接返回前臺字典形式數據 後臺代碼如下 ...
  • Expression<Func<CustomerType, bool>> expression = c => (c.Id != null); var c = from u in ccc where u.Name == editModel.Name select u.Name; ccc.Select( ...
  • 根據微軟MSDN,.Net Core無論是1.x還是2.0都只支持64位系統。 準備 以下是 支持的系統版本 以下 Linux 64 位(x86_64 或 amd64)發行版本/版本支持 .NET Core 1.x: Red Hat Enterprise Linux 7 CentOS 7 Oracl ...
  • 看了老K大神的python操作excel的視頻,記錄下常用方法,非常感謝老k的分享! 需要安裝xlrd模塊, 打開cmd,輸入命令:pip install xlrd 進行安裝,若已安裝顯示如下: xlrd讀取excel常用方法如下: ...
  • 參考博客:http://www.cnblogs.com/lincj/p/5617605.html 一、os.walk() os.walk(top, topdown=True, onerror=None, followlinks=False) 可以得到一個三元tupple(dirpath, dirna ...
  • 摘自:http://blog.chinaunix.net/uid-16360955-id-3351990.html 作留存學習 1.常用內置函數:(不用import就可以直接使用) help(obj) 線上幫助, obj可是任何類型 callable(obj) 查看一個obj是不是可以像函數一樣調用 ...
一周排行
    -Advertisement-
    Play Games
  • 問題 有很多應用程式在驗證JSON數據的時候用到了JSON Schema。 在微服務架構下,有時候各個微服務由於各種歷史原因,它們所生成的數據對JSON Object屬性名的大小寫規則可能並不統一,它們需要消費的JSON數據的屬性名可能需要大小寫無關。 遺憾的是,目前的JSON Schema沒有這方 ...
  • 首先下載centos07鏡像,建議使用阿裡雲推薦的地址: https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/?spm=a2c6h.25603864.0.0.59b5f5ad5Nfr0X 其實這裡就已經出現第一個坑了 centos 07 /u ...
  • 相信很多.NETer看了標題,都會忍不住好奇,點進來看看,並且順便準備要噴作者! 這裡,首先要申明一下,作者本人也非常喜歡Linq,也在各個項目中常用Linq。 我愛Linq,Linq優雅萬歲!!!(PS:順便吐槽一下,隔壁Java從8.0版本推出的Streams API,抄了個四不像,一點都不優雅 ...
  • 在人生的重要時刻,我站在了畢業的門檻上,望著前方的道路,心中涌動著對未來的無限憧憬與些許忐忑。面前,兩條道路蜿蜒伸展:一是繼續在職場中尋求穩定,一是勇敢地走出一條屬於自己的創新之路。儘管面臨年齡和現實的挑戰,我仍舊選擇勇往直前,用技術這把鑰匙,開啟新的人生篇章。 迴首過去,我深知時間寶貴,精力有限。 ...
  • 單元測試 前言 時隔多個月,終於抽空學習了點新知識,那麼這次來記錄一下C#怎麼進行單元測試,單元測試是做什麼的。 我相信大部分剛畢業的都很疑惑單元測試是乾什麼的?在小廠實習了6個月後,我發現每天除了寫CRUD就是寫CRUD,幾乎用不到單元測試。寫完一個功能直接上手去測,當然這隻是我個人感受,僅供參考 ...
  • 一:背景 1. 講故事 最近在分析dump時,發現有程式的卡死和WeakReference有關,在以前只知道怎麼用,但不清楚底層邏輯走向是什麼樣的,藉著這個dump的契機來簡單研究下。 二:弱引用的玩法 1. 一些基礎概念 用過WeakReference的朋友都知道這裡面又可以分為弱短和弱長兩個概念 ...
  • 最近想把ET打表工具的報錯提示直接調用win系統彈窗,好讓策劃明顯的知道表格哪裡填錯數據,彈窗需要調用System.Windows.Forms庫。操作如下: 需要在 .csproj 文件中添加: <UseWindowsForms>true</UseWindowsForms> 須將目標平臺設置為 Wi ...
  • 從C#3開始,拓展方法這一特性就得到了廣泛的應用。 此功能允許你能夠使用實例方法的語法調用某個靜態方法,以下是一個獲取/創建文件的靜態方法: public static async Task<StorageFile> GetOrCreateFileAsync(this StorageFolder f ...
  • 在Windows 11下,使用WinUI2.6以上版本的ListView長這樣: 然而到了Win10上,儘管其他控制項的樣式沒有改變,但ListViewItem變成了預設樣式(初代Fluent) 最重大的問題是,Win10上的HorizontalAlignment未被設置成Stretch,可能造成嚴重 ...
  • 前言 周六在公司加班,幹完活後越顯無聊,想著下載RabbiitMQ做個小項目玩玩。然而這一下就下載了2個小時,真讓人頭痛。 簡單的講一下如何安裝吧,網上教程和踩坑文章還是很多的,我講我感覺有用的文章放在本文末尾。 安裝地址 erlang 下載 - Erlang/OTP https://www.erl ...