golang 效能測試 (1)
本文介紹golang 如何做基準效能測試。
編寫完程式碼除了跑必要的單元測試外,還需要考慮程式碼跑起來的效能如何。效能的衡量其實就是程式執行時候程序的記憶體分配,CPU消耗情況。
golang 語言在提供了功能測試的基礎上,提供了豐富的效能測試功能。
SHOW CODE
首先,從一個例子來講起。 隨便寫一個簡單的快速排序,然後和系統自帶的排序做一個性能比較。
如下為簡版快排的程式碼:
package benchmark import "sort" func QSort(data []int) { myqsort(data, 0, len(data)-1) } func myqsort(data []int, s, e int) { if s >= e { return } t := data[s] i, j := s, e for i < j { for ; i < j && data[j] >= t; j-- { } for ; i < j && data[i] < t; i++ { } if i < j { break } data[i], data[j] = data[j], data[i] i++ j-- } data[i] = t myqsort(data, s, i-1) myqsort(data, i+1, e) }
然後編寫一個測試的test。
package benchmark import "testing" import "math/rand" import "time" import "sort" var ints []int // 長度為 1w 的資料使用系統自帶排序 func BenchmarkSort10k(t *testing.B) { slice := ints[0:10000] t.ResetTimer() // 只考慮下面程式碼的執行事件,所以重置計時器 for i := 0; i < t.N; i++ { sort.Ints(slice) } } // 長度為 100 的資料使用系統自帶排序 func BenchmarkSort100(t *testing.B) { slice := ints[0:100] t.ResetTimer() for i := 0; i < t.N; i++ { sort.Ints(slice) } } // 長度為 1w 的資料使用上述程式碼排序 func BenchmarkQsort10k(t *testing.B) { slice := ints[0:10000] t.ResetTimer() for i := 0; i < t.N; i++ { QSort(slice) } } // 長度為 100 的資料使用上述程式碼排序 func BenchmarkQsort100(t *testing.B) { slice := ints[0:100] t.ResetTimer() for i := 0; i < t.N; i++ { QSort(slice) } } // 資料初始化,為了保證每次資料都是一致的。 func TestMain(m *testing.M) { rand.Seed(time.Now().Unix()) ints = make([]int, 10000) for i := 0; i < 10000; i++ { ints[i] = rand.Int() } m.Run() }
執行命令 :
# go test -cover -count 3 -benchmem -bench=.
執行結果如下圖:
基準測試,預設將每個方法執行1s中,然後展示執行的次數,每一次執行的耗時, 上述還展示了記憶體每次分配的大小,以及每次benchmark分配的次數。上述的命令列指定了執行次數為3次,顯示程式碼覆蓋率和記憶體分配情況。
從基準測試的結果可以分析出:對於1w資料量的排序,自帶的排序比我的排序演算法要快20倍左右;100資料量的排序,手擼的排序略勝一籌。
從記憶體分析來講,系統自帶的會使用4B的資料,而我的演算法無記憶體分配。
INTRODUCE BENCHMARK
引入golang 提供的 testing
若需要做一些資料初始化的工作,可以如上寫一個TestMain 方法,將資料初始化的工作在這裡完成。
除了這些,可以看*testing.B, *testing.M 的相關方法即可。
最後,只要執行官方提供的 go test -bench=.
命令,即可開始跑基準測試。 當然,還有其他選項可以滿足我們多樣的需求。
例如:
- -cpu 1,2,4 指定執行的cpu 格式
- -count n 指定執行的次數
- -benchtime 每一條測試執行的時間 (預設是1s)
- -bench 指定執行bench的方法,
.
是全部 - -benchmem 顯示記憶體分配情況
其他引數可以通過 go help testflag
檢視
WHY SO SLOW
- 我這裡選取的是第一個數作為中位數,資料越大越可能出現傾斜,排序慢的概率也大。
- 正常的排序包中,都會在對小於等於12 個數的陣列做排序時使用希爾排序,速度也有很大提升。
除了簡單的做效能測試外,golang 還自帶了效能分析的工具,我們可以快速找出程式碼中的記憶體分配、cpu消耗的核心區,幫助我們解決服務的效能問題。下篇文章將做詳細瞭解。
相關推薦
golang 效能測試 (1)
本文介紹golang 如何做基準效能測試。 編寫完程式碼除了跑必要的單元測試外,還需要考慮程式碼跑起來的效能如何。效能的衡量其實就是程式執行時候程序的記憶體分配,CPU消耗情況。 golang 語言在提供了功能測試的基礎上,提供了豐富的效能測試功能。 SHOW CODE 首先,從一個例子來講起。 隨便寫一個簡
golang 效能測試 (1) 基準效能測試
本文介紹golang 如何做基準效能測試。 編寫完程式碼除了跑必要的單元測試外,還需要考慮程式碼跑起來的效能如何。效能的衡量其實就是程式執行時候程序的記憶體分配,CPU消耗情況。 golang 語言在提供了功能測試的基礎上,提供了豐富的效能測試功能。 SHOW CODE 首先,從一個例子來講起。 隨便寫一個簡
Locust效能測試 Locust效能測試1-環境準備與基本使用 Locust效能測試2-先登入場景案例 Locust效能測試3-no-web模式和csv報告儲存 Locust效能測試4-引數關聯 Locust效能測試5-引數化批量註冊
https://www.cnblogs.com/yoyoketang/p/9638151.html https://www.cnblogs.com/yoyoketang/p/9642242.html https://www.cnblogs.com/yoyoketang/p/9648100.html ht
Golang效能測試與思考
本文測試Go、Python、PyPy、C的效率,作為學習Go的參考標準。測試用例:進行(2<<25)次簡單加法 測試環境: 系統:Windows7 專業版 CPU:Intel® Core™ i5-4590 CPU @ 3.30GHZ 3.30GHZ
golang--效能測試和分析
前言 測試分為:壓力測試、負載測試、效能測試,功能測試等等,其中在開發過程中開發人員經常要寫一些test case unit 自己的模組進行功能測試測和效能。在分析出模組的效能瓶頸後開發人員就需要針對性的調優,但需要提醒的是調優工程一般要放在最後在進行,過早地優化會浪費開發時間,而且有時在需求或者功能變動後
RabbitMQ客戶端引數效能測試(1)
最近我在公司上線了rabbitmq,替換了原來阿里出的rocketmq(別說我黑阿里的東西,這玩意真的都是坑),我並不想告訴你rabbitmq安裝過程是怎麼樣的,去看官網就知道,戳這裡 看看網上說rabbitmq效率多高多高,但是怎麼測試也只有15000Qps,還是用golang的客戶端來測試訪問的中間沒有
效能測試-1-原理
話說: 難度係數:★★★☆☆ 建議用時:2周 目標 初步搭建一個自動化測試框架,技術選型:Jenkins+Ant+Jmeter。 1、按照場景組織各個介面,整體按照指定場景順序執行; 2、引數可注入(併發量threadsNumber、迴圈次數lo
效能測試1-分類和定義
效能測試按被測物件來分類會有(服務端、中介軟體、客戶端等) 本文章重點對服務端、系統的效能測試進行討論。 常會別人說到效能測試、負載測試、壓力測試、併發測試,很多人都是混合使用,或者一會叫壓力測試,一會叫併發測試。這些概念除了非測試人員分不清楚,甚至許多專業測試人員也對這些名詞也很模糊。關於
[go]golang snmp測試(1)
golang發展挺快的,現在都已經1.9了。現在也有了相對完備和可用的snmp庫。目前支援snmpv3的主要有2個庫,star都很少,看起來用snmp的人不多啊。github.com/soniah/gosnmp 293stargithub.com/k-sone/snmpg
Golang 效能測試 (3) 跟蹤刨析 golang trace
簡介 對於絕大部分服務,跟蹤刨析是用不到的。但是如果遇到了下面問題,可以不妨一試: 懷疑哪個協程慢了 系統呼叫有問題 協程排程問題 (chan 互動、互斥鎖、訊號量等) 懷疑是 gc (Garbage-Collect) 影響了服務效能 網路阻塞 等等 坦白的講,通過跟蹤刨析可以看到每個協程在某一時刻在幹什
【測試報告】效能測試報告模版1
目錄 一、文件目錄 二、模版下載 三、文件內容 四、測試環境軟硬體配置資料獲取 一、文件目錄 二、模版下載 我的資源下載地址:【測試報告】效能測試報告模版1 三、文件內容 四
效能測試通用原則【3-1;2-5-10;80/20】
如果設計說明書中沒有給出明確的標準,那麼可以參考國外的業內公認的一些標準: 3+1原則(指量、全、深+快) 主要對效能測試設計、測試執行以及資料分析。 量:包括業務量(業務型別),負荷量(系統處理的流量),配置量(軟體配置和硬體配置),使用者量(靜態使用者和動態使用者)
jmeter介面效能測試(1)----簡單的介面測試入門
首先來看一下介面的資訊:host:http://api.jhled888.comuri: /cgi-bin/get.json 介面請求方式: GET 入參:appid: jhyjlhxa03q4f2qlmfappsecret:eb28066907b14310a9401c0586c840
效能測試初級篇1(理論知識)
第一章 效能測試基礎 1、為什麼做效能測試 找出效能的瓶頸,達到軟體的質量目標,給使用者帶來良好的體驗 2、效能測試流程 效能測試需求分析---效能測試計劃---效能測試用例---效能測試平臺搭建---效能測試指令碼開發---效能測試場景設定---效能測試執行---效能測試結果分析(找
Golang的簡單反射效能測試
測試用例 我們對Golang的結構體變數賦值, 以及單引數函式呼叫進行反射和native操作的測試package mainimport ( "reflect" "testing")type data struct { Hp int}const AssignTimes = 100000
raid0+1和raid5的效能測試結果
網上關於效能比較和原理的文章很多,這裡不再過多解釋,只寫測試結果。測試目的:4塊物理硬碟,使用IBMraid卡做raid。4塊做raid 5和兩塊盤分別raid 1的讀效能比較。由於寫會往本地盤寫入資料,暫時沒有測試工具:oracle orign 4塊物理盤做 raid 5
Golang單元測試、效能測試
Test 單元測試 testing包提供了對Go包的自動測試支援。 這是和go test 命令相呼應的功能, go test 命令會自動執行所以符合格式 func TestXXX(t *testing.T) 的函式。 Benchmark 效能測試 Functions of the f
LoadRunner:Controller及結果分析 一、效能測試概述 1、關於效能測試目標: ①TPS ②一定併發使用者數下功能點的響應時間 ③一定響應時間內功能點的併發使用者數 效能測試不是
一、效能測試概述 1、關於效能測試目標: ①TPS ②一定併發使用者數下功能點的響應時間 ③一定響應時間內功能點的併發使用者數 效能測試不是達到既定目標即可,還要測試軟體功能能夠達到的極限值。 2、關於效能測試的場景: 在指令碼錄製除錯完成後,需要進行場景的設定,進而對指令碼進行壓測,分析壓測的結果。 效能
通過python呼叫adb命令對app進行效能測試(6 -1)
上篇文章中講述了adb是什麼,以及常用的命令,下面我們來看下通過adb來檢視手機裝置中的效能引數,首先要檢視apk的包名和預設Activity的名字有好幾種方式,下面介紹2種 第一種 1 開啟cmd 切換目錄D:\tool\android-sdk_r24.
效能測試瓶頸分析(1)
所謂效能瓶頸是限制系統性能的關鍵因素 1、硬體上的效能瓶頸 包括:CPU、記憶體(RAM)、磁碟I/O 例如:在需求分析和概要設計師。確定資料庫伺服器需要6個CPU、12G記憶體,但是測試時,發現CPU的持續利用率在95%以上,這時可認為在硬體上出現效能瓶頸