久久国产乱子伦精品免费M,亚洲一区二区三区91,欧美国产在线视频,国产精品视频久久

Go 語言性能測試

本文來學習一下如何進行 Go 語言的性能測試。這里需要學習一個 Go 語言官方提供的工具 pprof:

  • runtime/pprof:采集程序(非 Server)的運行數據進行分析;
  • net/http/pprof:采集 HTTP Server 的運行時數據進行分析。

上述兩個包的底層實現是一樣的,一般建議直接在主函數上加上 http 服務而使用第二個包,畢竟可視化顯示易于觀察和操作。故本文僅介紹?net/http/pprof?的用法。

 

1. pprof 使用方法

直接在程序入口,也就是 main 函數所在的文件中導入 pprof。

代碼塊
  • 1 import _ "net/http/pprof"

示例代碼如下:

代碼塊
  • 1? package main
  • 2
  • 3? import (
  • 4? ? ? ? ? "fmt"
  • 5? ? ? ? ? "net/http"
  • 6? ? ? ? ? _ "net/http/pprof"
  • 7? ? ? ? ? "time"
  • 8? )
  • 9
  • 10? func main() {
  • 11? ? ? ? //打印數字
  • 12? ? ? ? go printNum()
  • 13? ? ? ? //打印字符
  • 14? ? ? ? go printChar()
  • 15? ? ? ? http.ListenAndServe("0.0.0.0:9300", nil)//啟動一個服務用于查看性能分析可視化頁面
  • 16? }
  • 17? func printChar() {
  • 18? ? ? ? for i := '0'; ; i++ {
  • 19? ? ? ? ? ? ? ? fmt.Println("printChar:", string(i))
  • 20? ? ? ? ? ? ? ? time.Sleep(time.Second)
  • 21? ? ? ? }
  • 22? }
  • 23? func printNum() {
  • 24? ? ? ? for i := 0; ; i++ {
  • 25? ? ? ? ? ? ? ? fmt.Println("printNum:", i)
  • 26? ? ? ? ? ? ? ? time.Sleep(time.Second)
  • 27? ? ? ? }
  • 28? }

上述代碼啟動,pprof 會在這個服務上自動創建路由:

代碼塊
  • 1? debug/pprof/

在瀏覽器中輸入127.0.0.1:9300/debug/pprof/,會出現如下頁面:

圖片描述

這個路由下還有幾個子頁面:

  • allocs:內存分配情況;
  • block:獲取導致阻塞的 goroutine 堆棧(如 channel, mutex 等);
  • cmdline:當前程序激活的命令行啟動參數;
  • goroutine:當前當前運行的 goroutine 的堆棧信息;
  • heap:存活對象的內存分配情況;
  • mutex?:互斥鎖的競爭持有者的堆棧跟蹤;
  • profile:默認進行 30s 的 CPU Profiling,得到一個分析用的 profile 文件;
  • threadcreate:操作系統線程跟蹤;
  • trace:得到一個分析用的 trace 文件。

 

2. 使用工具分析 profile 和 trace

當在127.0.0.1:9300/debug/pprof/中點擊 profile 和 trace 時會分別得到一個文件,我們可以使用 Go 語言自帶的工具對這兩個文件進行解析。在解析之前,需要編譯得到程序代碼的可執行文件,配合分析文件使用。

 

2.1 解析 profile

使用如下命令行進入解析頁面:

代碼塊
  • 1? go tool pprof .firstgo.exe .profile

執行結果:

圖片描述

如上如所示,我們進入了 pprof 的命令行界面,可以輸入top來查看前 10 行數的 CPU 占用情況:

圖片描述
  • flat:采樣頻率(10ms);
  • flat%:采樣頻率(10ms)下,CPU 運行耗時總比例;
  • sum%:給定函數累積使用 CPU 總比例,如第二行 sum% =40.00% = 20.00% + 20.00%;
  • cum:當前函數加上它之上的調用運行總耗時,包括函數等待子函數返回;
  • cum%:CPU 運行耗時總比例;
  • 最后一列為函數名稱。

還可使用 help 指令來查看 pprof 所有操作,讀者可以自行探索。

 

2.2 解析 trace

使用如下命令解析 trace 文件:

代碼塊
  • 1? go tool trace .firstgo.exe .trace

此時會自動打開一個 web 頁面:

圖片描述
  • View trace:查看跟蹤;
  • Goroutine analysis:Goroutine 分析;
  • Network blocking profile:網絡阻塞概況;
  • Synchronization blocking profile:同步阻塞概況;
  • Syscall blocking profile:系統調用阻塞概況;
  • Scheduler latency profile:調度延遲概況;
  • User defined tasks:用戶自定義任務;
  • User defined regions:用戶自定義區域;
  • Minimum mutator utilization:最低 Mutator 利用率。

我們可以看到有的鏈接后面跟著(?),是因為這些鏈接的使用需要配合第三方工具,可以點進去查看缺失的內容,下載安裝后就可以使用了,一般使用前兩個就可以分析程序的執行情況了。

 

3. 小結

本文主要介紹了 Go 語言自帶的工具 pprof 的用法,以及其生成分析文件的解析。需要注意的是每個分析文件都要配合這個程序的可執行文件使用。還有就是建議大家在開發過程中盡量時不時的用一下 pprof,可以使開發出來的程序更穩定更高效。

文章來源于網絡,侵刪!

相關新聞

歷經多年發展,已成為國內好評如潮的Linux云計算運維、SRE、Devops、網絡安全、云原生、Go、Python開發專業人才培訓機構!

    1. 主站蜘蛛池模板: 安岳县| 余干县| 内黄县| 阿巴嘎旗| 巢湖市| 亚东县| 彩票| 延川县| 景洪市| 含山县| 岢岚县| 南宁市| 中牟县| 伊吾县| 江都市| 澄迈县| 尉犁县| 景东| 吴桥县| 肇州县| 宜都市| 英山县| 漯河市| 漳浦县| 建昌县| 屯门区| 开阳县| 濮阳县| 阿城市| 策勒县| 平舆县| 冷水江市| 上饶市| 隆子县| 孟津县| 贺兰县| 杨浦区| 卫辉市| 连江县| 丹阳市| 牡丹江市|