1. 程式人生 > >Golang使用pprof和qcachegrind進行效能監控-簡明教程

Golang使用pprof和qcachegrind進行效能監控-簡明教程

Golang為我們提供了非常方便的效能測試工具pprof,使用pprof可以非常方便地對Go程式的執行效率進行監測。本文講述如何使用pprof對Go程式進行效能測試,並使用qcachegrind檢視效能測試的輸出檔案。

載入pprof模組

想要對一個Go程式進行pprof監測,第一步是在main函式所在的模組中新增 net/http/pprof 模組。import後面的“_”是一定要加上的。

import _ "net/http/pprof"

執行HTTP伺服器

如果你的程式不是一個Web伺服器,那麼你還需要再程式中啟動一個Http伺服器,如下所示:

go func() {
   http.ListenAndServe("localhost:13001", nil)
}()

重新編譯並執行程式。然後我們可以通過網頁瀏覽器檢視當前程式的執行狀態:http://localhost:13001/debug/pprof 。如果執行正常,可以看到類似如下的輸出:

/debug/pprof/

profiles:
0	block
9	goroutine
7	heap
0	mutex
12	threadcreate

full goroutine stack dump

在這個網頁裡我們可以檢視程式當前的goroutine執行狀態、記憶體使用情況等資訊。

使用go tool pprof命令

開啟命令列,輸入命令: go tool pprof http://localhost:13001/debug/pprof/profile

 ,此時命令列會卡出,並列印類似如下資訊:

C:\Users\Administrator>go tool pprof http://localhost:13001/debug/pprof/profile
Fetching profile from http://localhost:13001/debug/pprof/profile
Please wait... (30s)
Saved profile in \pprof\pprof.localhost:13001.samples.cpu.007.pb.gz
Entering interactive mode (type "help" for commands)

在經過30秒的等待之後,效能測試完成,會在本地儲存壓測結果。

可以使用top命令檢視開銷最大的一些函式,或者使用web命令直接在網頁中檢視,其他的命令還包括:svg,pdf,png等,你可以選擇自己所習慣的工具檢視效能檢測結果。

(pprof) top20
970ms of 1130ms total (85.84%)
Showing top 20 nodes out of 86 (cum >= 20ms)
      flat  flat%   sum%        cum   cum%
     280ms 24.78% 24.78%      300ms 26.55%  runtime.stdcall1
     100ms  8.85% 33.63%      110ms  9.73%  runtime.acquirep
     100ms  8.85% 42.48%      100ms  8.85%  runtime.siftdownTimer
      90ms  7.96% 50.44%       90ms  7.96%  runtime.osyield
      80ms  7.08% 57.52%      260ms 23.01%  runtime.timerproc
      60ms  5.31% 62.83%       60ms  5.31%  runtime.memeqbody
      50ms  4.42% 67.26%       50ms  4.42%  runtime.casgstatus
      30ms  2.65% 69.91%       30ms  2.65%  runtime.cgocall
      30ms  2.65% 72.57%      430ms 38.05%  runtime.exitsyscallfast_pidle
      20ms  1.77% 74.34%       20ms  1.77%  runtime.asmstdcall
      20ms  1.77% 76.11%       20ms  1.77%  runtime.goready
      20ms  1.77% 77.88%       20ms  1.77%  runtime.pidleget
      20ms  1.77% 79.65%       60ms  5.31%  runtime.startm
      10ms  0.88% 80.53%       20ms  1.77%  github.com/xiaonanln/goworld/netutil.(*PacketConnection).Flush
      10ms  0.88% 81.42%       10ms  0.88%  github.com/xiaonanln/goworld/netutil.allocPacket
      10ms  0.88% 82.30%       80ms  7.08%  main.(*DispatcherService).getEntityDispatcherInfoForRead
      10ms  0.88% 83.19%       10ms  0.88%  net.(*fdMutex).rwunlock
      10ms  0.88% 84.07%       10ms  0.88%  runtime.(*guintptr).cas
      10ms  0.88% 84.96%       10ms  0.88%  runtime.acquirep1
      10ms  0.88% 85.84%       20ms  1.77%  runtime.asmcgocall

值得一提的是,如果我們的程式中一臺Linux伺服器上執行,我們也可以在自己的Windows電腦上執行go tool pprof命令,只需要將網址裡的localhost替換為Linux伺服器的地址即可。

使用qcachegrind檢視效能監測結果

在go tool pprof的命令列裡,使用callgrind命令生成qcachegrind工具所支援的檔案型別:

(pprof) callgrind
Generating report in profile010.callgraph.out

然後使用下載的qcachegrind.exe開啟生成的檔案即可,此處為:profile010.callgraph.out。使用qcachegrind可以在各個函式之間自由跳轉,檢視函式內部的CPU佔用情況,相對其他格式要更加靈活方便。例如以下是我們對GoWorld遊戲伺服器進行一次效能測試的結果。

不成熟的優化是萬惡之源!因此我們在對自己的Go程式進行優化之前,不妨先使用go tool pprof對程式效能進行檢測,然後對關鍵的效能瓶頸部分進行優化,這樣才會起到事半功倍的效果。Golang提供的pprof是進行效能測試的利器,經過我們的實際使用發現,即使在開啟效能測試的30s裡,pprof對程式帶來的效能損耗並不大。

相關推薦

Golang使用pprofqcachegrind進行效能監控-簡明教程

Golang為我們提供了非常方便的效能測試工具pprof,使用pprof可以非常方便地對Go程式的執行效率進行監測。本文講述如何使用pprof對Go程式進行效能測試,並使用qcachegrind檢視效能測試的輸出檔案。 載入pprof模組 想要對一個Go程式進行pprof監測,第一步是在main函式所在的

基於PrometheusGrafana進行效能監控_Kubernetes中文社群

1、Prometheus介紹和架構 1.1 Prometheus介紹 Prometheus是一個開源的系統監視和警報工具包,自2012成立以來,許多公司和組織採用了Prometheus。它現在是一個獨立的開源專案,並獨立於任何公司維護。在2016年,Prometheus加入雲端計算基金會作為K

linux系統看系統性能進行效能監控的幾大命令列

一般我們檢視系統性能主要是在以下幾個方面 1.使用者使用CPU情況 展現為 %user 2.系統使用CPU情況 展現為 %sys 3.wio或iowait     展現為 %iowait 程序由於等待磁碟IO而使CPU處於空閒狀態的比率 4.CPU的空閒率 5.CPU上下文的

linux 下檢視系統資源負載,以及效能監控

 命令相關: 1,檢視磁碟 df -h 2,檢視記憶體大小 free free [-m|g]按MB,GB顯示記憶體 vmstat 3,檢視cpu cat /proc/cpuinfo 只看cpu數量    grep "model name" /pro

Jmeter 結合 Servers Performance Monitoring 外掛進行效能監控

我們在使用Jmeter進行效能測試的時候很多時候都得關注服務端的效能的資源佔用情況。所以你可能就得另外找個工具來進行資料的採集了。但是Jmeter實際上已經有對應的外掛完成了這項工作了。 介紹 效果就如上圖所示。 使用 其實使用方法也

IPhone開發工具篇-利用xcode profileanalyze進行效能優化

記憶體洩漏問題的解決 記憶體洩漏(Memory Leaks)是當一個物件或變數在使用完成後沒有釋放掉,這個物件一直佔有著這塊記憶體,直到應用停止。如果這種物件過多記憶體就會耗盡,其它的應用就無法執行。這個問題在C++、C和Objective-C的MRR中是比較普遍的問題。 在Objective-C中釋

使用 Prometheus + Grafana 對 Kubernetes 進行效能監控的實踐

本文由 網易雲 釋出1 什麼是 Kubernetes?Kubernetes 是 Google 開源的容器叢集管理系統,其管理操作包括部署,排程和節點叢集間擴充套件等。 如下圖所示為目前 Kubernetes 的架構圖,由 master 和 node 端構成,排程部署和擴充套件

JProfiler入門教程(3)--JProfiler進行本地JVM的效能監控

監視本地的Tomcat, 看似是本地,其實JProfiler GUI在一個單獨的JVM裡啟動,他與被監視的目標jvm之間通過socket通訊,目的為了不干擾目標JVM。所以監視本地Tomcat與監視遠端的Tomcat的配置方法基本是一樣的。當你學會了如何監控本地

使用Perf4J進行效能分析監控

原文地址:http://www.infoq.com/cn/articles/perf4j/ 許多開發人員都很熟悉墨菲法則的一個例子:他們發現在花費了大量時間確保應用程式在開發環境中快速和靈活之後,在釋出到生產環境的時候效能會不可思議的大幅下降。更糟糕的是,應用程式平時執行

詳細教程丨使用PrometheusThanos進行高可用K8S監控

本文轉自[Rancher Labs](https://mp.weixin.qq.com/s/E7fF0SKdrQhTESBD3cYTmw "Rancher Labs") ## 介 紹 ### Prometheus高可用的必要性 在過去的幾年裡,Kubernetes的採用量增長了數倍。很明顯,K

【技術翻譯】支持向量機簡明教程及其在pythonR下的調參

sel machine 線性 線上 ont 投影 vars 不一定 .cn 原文: Simple Tutorial on SVM and Parameter Tuning in Python and R 介紹 數據在機器學習中是重要的一種任務,支持向量機(SVM)

拍照聚焦曝光,AVFoundation 簡明教程

直接看拍照聚焦和曝光 上手就用 AVKit 搞音視訊。靈活的控制,就要用到 AVFoundation 了。 要點: 使用資源(一般就是照片庫裡面的視訊,圖片,live photo), 播放, 編輯, 捕捉(拍照和錄視訊) 匯出資源(就處理過的資源,拍的照片,編輯的視訊,匯出到相

【nmon】伺服器效能監控工具nmon安裝使用

目錄 一、檢視linux系統伺服器版本資訊 ​二、nmon下載 三、nmon安裝 ​四、安裝成功校檢 五、測試監控 六、監控資料採集 一、檢視linux系統伺服器版本資訊 (Linux檢視版本當前作業系統核心資訊):uname -a (Linux檢視當

Linux效能監控除錯

作者:forest 來自:www.linuxstory.org 0 題記 對於每個網際網路研發人員來說,每天要監控和除錯 Linux 系統性能問題都是非常困難的工作。 為此,我們總結了非常有用的並且最常用的20個命令列系統監視工具。這些命令可以在所有版本的 Linux&nb

常用的虛擬機器效能監控故障處理工具

1. jps : 虛擬機器程序狀況工具          可以列出正在執行的虛擬機器程序,並顯示虛擬機器執行主類名稱,以及這些程序的本地虛擬機器唯一ID(LVMID)。          

[jvm]五tomcat效能調優效能監控(visualvm)

1、JDK記憶體優化 根據伺服器物理內容情況配置相關引數優化tomcat效能。當應用程式需要的記憶體超出堆的最大值時虛擬機器就會提示記憶體溢位,並且導致應用服務崩潰。因此一般建議堆的最大值設定為可用記憶體的最大值的80%。 Tomcat預設可以使用的記憶體為128MB,在較大型的應用專案中,

用 dotTrace 進行效能分析時,各種不同效能分析選項的含義用途

對 .NET 程式進行效能分析,dotTrace 能應對絕大多數的場景。在開啟一個程序進行效能分析之前,我們會看到一些效能分析選項(Profiler Options)。本文將介紹這幾個選項的含義,並用實際的例子來說明其用途。 本文內容

Linux下Windows下的效能監控

Linux -- uptime命令: top命令:可以知道每個程序佔CPU的情況 total 程序總數 running 正在執行的程序數 sleeping 睡眠的程序數 stopped 停止的程序數 zombie 殭屍程序數 Cpu(s): 0.1% us 使用者空間佔用C

spring MVC——攔截器實現登入檢測效能監控

1. 攔截器簡介 Spring MVC中的攔截器,類似於Servlet開發中的過濾器Filter,主要用來攔截使用者的請求並進行相應的處理,可以用來做日誌記錄、許可權驗證或者登陸檢測。 (1) 常見的應用場景 日誌記錄:記錄請求資訊的日誌,以便進行資訊監控、資訊統計、計

在k8s叢集中,利用prometheus的jmx_exporter進行tomcat的JVM效能監控,並用grafana作前端展示

查找了很多文件,沒有完全達到我要求的, 於是,作了一定的調整,成現在這樣。 操作步驟如下: 一,準備好兩個檔案。 jmx_prometheus_javaagent-0.3.1.jar jmx_exporter.yml jmx_exporter.yml作最簡單配置如下: --- rules