golang基準測試Benchmark和Jmeter壓測實踐

golang的性能測試Benchmark

go test 自帶有三種測試:

  • 功能測試(單元測試)
  • 基準測試 (性能測試)
  • 實例測試 (舉例測試)

今天主要是寫一下基準測試也就是我們的性能測試實踐相關放案。

基準測試是測量一個程序在固定工作負載下的性能狱从。

在Go語言中鱼炒,基準測試函數(shù)和普通測試函數(shù)寫法類似男韧,但是以Benchmark為前綴名勘天,并且?guī)в幸粋€testing.B類型的參數(shù)滩报;testing.B參數(shù)除了提供和*testing.T類似的方法宝惰,還有額外一些和性能測量相關的方法。

它還提供了一個整數(shù)N粱腻,用于指定操作執(zhí)行的循環(huán)次數(shù)庇配。


func BenchmarkAdapter_GetReport(b *testing.B) {
    a := &Adapter{
        Server: "127.0.0.1:9094/tenant",
    }
    for i := 0; i < b.N; i++ {
        b.ReportAllocs() // 這里可以直接調(diào)用 ReportAllocs 方法,就省去了再命令行中輸入 -benchmem 绍些,用于查看內(nèi)存分配的大小和次數(shù)
        _, _ = a.GetReport("devices", "appsinfo", "")
    }
}

然后在命令行輸入如下:

go test -bench=GetReport

又或者直接填入測試函數(shù)名:

 go test -bench=BenchmarkAdapter_GetReport

最終顯示數(shù)據(jù)如下:

goos: darwin
goarch: amd64
pkg: safeuem/report/service/adapter
BenchmarkAdapter_GetReport-4         500       2351618 ns/op       20770 B/op        301 allocs/op
PASS
ok      safeuem/report/service/adapter  2.741s
  • BenchmarkAdapter_GetReport-4 :

這里的-4中的4 表示最大 P 數(shù)量捞慌,最大 P 數(shù)量相當于可以同時運行 goroutine 的邏輯 CPU 的最大個數(shù)。這里的邏輯 CPU柬批,也可以被稱為 CPU 核心卿闹,但它并不等同于計算機中真正的 CPU 核心,只是 Go 語言運行時系統(tǒng)內(nèi)部的一個概念萝快,代表著它同時運行 goroutine 的能力。

對應 golang 就是 GOMAXPROCS 的值著角。這個你可以自行設置揪漩,可以通過調(diào)用 runtime.GOMAXPROCS 函數(shù)改變最大P數(shù)量,也可以在命令行 go test 加入 -cpu=2 吏口。

  • 500 2351618 ns/op

顯示每次調(diào)用 GetReport 函數(shù)花費 2.351618毫秒 奄容,是執(zhí)行 500次 的平均時間。

1s=1000ms=1000000us=1000000000ns

因為基準測試驅(qū)動器開始時并不知道每個基準測試函數(shù)運行所花的時間产徊,它會嘗試在真正運行基準測試前先嘗試用較小的N運行測試來估算基準測試函數(shù)所需要的時間昂勒,然后推斷一個較大的時間保證穩(wěn)定的測量結果

  • 20770 B/op 301 allocs/op

表示平均500此種,每次分配了內(nèi)存為 20770 B(字節(jié)) = 20.28KB = 0.0198MB 和 每次調(diào)用分配了 301次

1MB=1024KB

1KB=1024B

  • 2.741s

表示測試總耗時舟铜。

小提示:

其實這里的總耗時戈盈,其實默認是1s,當測試次數(shù)逐漸遞增到時間剛好超過1s 時測試就會停止谆刨,并顯示測試塘娶,這里是500次。

當然如果你的本身的測試函數(shù)運行一次就已經(jīng)大于了1s,為了提高測試的精確性痊夭,你可以在命令行輸入 :

go test -bench=GetReport -benchtime=5s



jmeter 壓力測試

首先要安裝 請看鏈接不多說

如果下載頁面進不去 移步到此處下載即可

注意 : 一定要配置好java的環(huán)境變量才開始壓測哦刁岸!

運行啟動如圖所示:

image

1. 你可以開始配置要測試的http接口:

image

2. 線程數(shù)的配置:

image

3. 建立HTTP請求接口:

image

4. 建立監(jiān)控器 數(shù)據(jù)展示

可以建立三個查看,一般我建立聚合報告看看就可以了她我。

image

聚合報告數(shù)據(jù)說明:

來看如圖所示的數(shù)據(jù):

中文版

image

英文版

image

這里我的線程數(shù)改變了 2 虹曙。

  • Label:每個 JMeter 的 element(例如 HTTP Request)都有一個 Name 屬性迫横,這里顯示的就是 Name 屬性的值

  • Samples:表示你這次測試中一共發(fā)出了多少個請求,如果模擬10個用戶酝碳,每個用戶迭代10次矾踱,那么這里顯示100,每個用戶只迭代一次就是10了击敌。我這里自然是 2.

  • Average:平均響應時間(單位ms介返,1s=1000ms)——默認情況下是單個 Request 的平均響應時間,當使用了 Transaction Controller 時沃斤,也可以以Transaction 為單位顯示平均響應時間

  • Median:中位數(shù)圣蝎,也就是 50% 用戶的響應時間

  • 90% Line:90% 用戶的響應時間

  • Min:最小響應時間

  • Max:最大響應時間

  • Error%:本次測試中出現(xiàn)錯誤的請求的數(shù)量/請求的總數(shù)

  • Throughput:吞吐量——默認情況下表示每秒完成的請求數(shù)(Request per Second),如果你的接口超過了每秒請求一次就會按照每分鐘展示衡瓶, 當使用了 Transaction Controller 時徘公,也可以表示類似 LoadRunner 的 Transaction per Second 數(shù)

  • Received KB/Sec:每秒從服務器端接收到的數(shù)據(jù)量,相當于LoadRunner中的Throughput/Sec

  • Send KB/Sec: 每秒向服務器端接發(fā)送的數(shù)據(jù)量哮针。

所以如圖中的線程數(shù)為2的測試中关面,平均每次響應時間為 554 毫秒相當于半秒,吞吐量為每秒處理了 1.9 次十厢,額等太。。蛮放。很渣的性能缩抡。

因為這個接口本來就沒有高并發(fā)場景要求,而且里面有個比較麻煩的遞歸查詢操作很消耗性能的包颁。

加大壓力進行測試

那么如果出現(xiàn)較多的訪問該接口瞻想,較高并發(fā)訪問性能是如何的呢。

來個小 50 試試呢娩嚼。

image

好吧蘑险,這個接口性能確實很差。岳悟。佃迄。平均一個接口處理要6s的時間。

具體分析原因:

  • 一個是遞歸耗性能
  • 另一個應該是Cassandra數(shù)據(jù)庫I/O是性能瓶頸贵少,pool可以從10調(diào)大到100試試和屎。

將Cassandra連接池pool調(diào)為100壓測數(shù)據(jù)

image

將線程數(shù)設置為200壓測數(shù)據(jù)如下:

image

果然性能處理要好很多了。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末春瞬,一起剝皮案震驚了整個濱河市柴信,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌宽气,老刑警劉巖随常,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件潜沦,死亡現(xiàn)場離奇詭異,居然都是意外死亡绪氛,警方通過查閱死者的電腦和手機唆鸡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來枣察,“玉大人争占,你說我怎么就攤上這事⌒蚰浚” “怎么了臂痕?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長猿涨。 經(jīng)常有香客問我握童,道長,這世上最難降的妖魔是什么叛赚? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任澡绩,我火速辦了婚禮,結果婚禮上俺附,老公的妹妹穿的比我還像新娘肥卡。我一直安慰自己,他們只是感情好事镣,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布步鉴。 她就那樣靜靜地躺著,像睡著了一般蛮浑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上只嚣,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天沮稚,我揣著相機與錄音,去河邊找鬼册舞。 笑死蕴掏,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的调鲸。 我是一名探鬼主播盛杰,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼藐石!你這毒婦竟也來了即供?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤于微,失蹤者是張志新(化名)和其女友劉穎逗嫡,沒想到半個月后青自,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡驱证,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年延窜,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抹锄。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡逆瑞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出伙单,到底是詐尸還是另有隱情获高,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布车份,位于F島的核電站谋减,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏扫沼。R本人自食惡果不足惜出爹,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望缎除。 院中可真熱鬧严就,春花似錦、人聲如沸器罐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽轰坊。三九已至铸董,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間肴沫,已是汗流浹背粟害。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留颤芬,地道東北人悲幅。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像站蝠,于是被迫代替她去往敵國和親汰具。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容