Go壓測工具

前言

在做Go的性能分析調研的時候也使用到了一些壓測方面的工具,go本身也給我們提供了BenchMark性能測試用例,可以很好的去測試我們的單個程序性能,比如測試某個函數,另外還有第三方包go-wrk也可以幫助我們做http接口的性能壓測,今天就來介紹下這兩種工具的使用。

BenchMark?

BenchMark是Go的單測包testing里提供的一個壓測工具類,可以幫助我們測試某個代碼片段或者函數的性能,包括耗時、內存占用和內存分配的情況。

使用方法

在單元測試文件中寫一個性能的單測函數,函數名必須以Benchmark開頭

下面寫一個測試json序列化的性能測試用例:

func BenchmarkEncodingJsonMarshal(b *testing.B) {for i := 0; i < b.N; i++ {   //固定寫法,N表示隨機執行多少次,多次執行可以保證測試結果的可靠性json.Marshal(agentAggregatedDetections)  //要測試的程序片段}
}

執行結果如下:

?有的時候我們測試某個函數只希望測試某個代碼片段,可能就認為這里需要驗證一下,這種也可以在單測里面標識,下面這個代碼執行情況和上面一樣

func BenchmarkEncodingJsonMarshal(b *testing.B) {//與性能無關的代碼b.ResetTimer()for i := 0; i < b.N; i++ {json.Marshal(agentAggregatedDetections)}b.StopTimer()//與性能無關的代碼
}

上面這種方法是在編輯器里面執行的,我們也可以在命令行里面執行對應的test類,并且可以帶上一些參數觀察更多的信息,這個也是比較常用的方式

執行命令:

go test -bench=BenchmarkEncodingJsonMarshal   //如果要執行所有的測試類下面的Benchmark函數:bench=.

輔助參數

-benchtime
  • 前面的命令中我們并沒有指定測試時長,因此使用的是默認值1秒,現在咱們來修改這個參數試試,畢竟1秒內完成基準測試并不是普遍適用的
  • 指定基準測試時長為10秒:go test -bench=BenchmarkEncodingJsonMarshal -benchtime=10s
  • 除了指定測試時長,還可以通過benchtime指定執行次數,這個次數就是我們在for循環里寫的b.N這個數字,標識執行多少次循環,指定程序執行1000次:-benchtime=1000x
-count
  • count是用來控制函數的執行次數,默認是1次,這個和benchtime里面的次數不同,count是控制Benchmarkxxx函數的執行次數,benchtime是控制函數里面for循環的執行次數
    go test -bench=BenchmarkEncodingJsonMarshal -count=2 -benchtime=1000x

-benchmem
  • benchmem參數可以用來查看程序在執行的時候內存使用和內存次數分配的情況
    go test -bench=BenchmarkEncodingJsonMarshal ?-benchtime=1000x -benchmem

go-wrk

go版本的wrk工具,用來壓測http接口,go-wrk本身也是一個第三方的go項目,項目地址:GitHub - adjust/go-wrk: a small heavy duty http/https benchmark tool written in go

安裝go-wrk

1、下載項目到本地:git clone?https://github.com/adjust/go-wrk.git

2、執行go mod init go-wrk初始化module

3、go build生成go-wrk可執行文件

使用go-wrk

壓測一個go服務的http接口:go-wrk -c=400 -t=8 -n=10000 -m=GET "http://10.106.19.12:8080/performance/pertest"

命令行中的參數說明:

-H="User-Agent: go-wrk 0.1 bechmark\nContent-Type: text/html;": 由'\n'分隔的請求頭
-c=100: 使用的最大連接數
-k=true: 是否禁用keep-alives
-i=false: if TLS security checks are disabled
-m="GET": HTTP請求方法
-n=1000: 請求總數
-t=1: 使用的線程數
-b="" HTTP請求體
-s="" 如果指定,它將計算響應中包含搜索到的字符串s的頻率

輸出結果參數說明:

Avg time per request:請求的平均響應時間
Requests per second:每秒鐘處理的請求數量(QPS)
99th percentile time:接口請求耗時99線
Slowest time for request:耗時最長的請求時間

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/211421.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/211421.shtml
英文地址,請注明出處:http://en.pswp.cn/news/211421.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C# 任務并行類庫Parallel調用示例

寫在前面 Task Parallel Library 是微軟.NET框架基礎類庫&#xff08;BCL&#xff09;中的一個&#xff0c;主要目的是為了簡化并行編程&#xff0c;可以實現在不同的處理器上并行處理不同任務&#xff0c;以提升運行效率。Parallel常用的方法有For/ForEach/Invoke三個靜態方法…

Element-UI定制化Tree 樹形控件

1.復制 說明&#xff1a;復制Tree樹形控件。 <script> export default {data() {return {data: [{label: 一級 1,children: [{label: 二級 1-1,children: [{label: 三級 1-1-1}]}]}, {label: 一級 2,children: [{label: 二級 2-1,children: [{label: 三級 2-1-1}]}, {l…

Linux:進程優先級與命令行參數

目錄 1.進程優先級 1.1 基本概念 1.2 查看系統進程 1.3 修改進程優先級的命令 2.進程間切換 2.1 相關概念 2.2 Linux2.6內核進程調度隊列&#xff08;了解即可&#xff09; 3.命令行參數 1.進程優先級 1.1 基本概念 cpu資源分配的先后順序&#xff0c;就是指進程的優…

【C++】在類外部定義成員函數時,不應該再次指定默認參數值

2023年12月10日&#xff0c;周日下午 錯誤的代碼 #include<iostream>class A { public:void fun(int a10); };void A::fun(int a10) //<----在這里報錯 {}int main() {} 正確的代碼 代碼目前有一個問題&#xff0c;主要是在類外部定義成員函數時&#xff0c;不應該…

解密QQ號——C語言

題目&#xff1a; 有一串已加密的數字“6 3 1 7 5 8 9 2 4”解密規則&#xff1a;首先將第1個數字刪除&#xff0c;緊接著將第2個數字放到這串數字的末尾&#xff0c;再將第3個數字刪除并將第4個數字放到這串數字的末尾&#xff0c;再將第5個數刪除 代碼實現&#xff1a; #inc…

利用Node.js和cpolar實現遠程訪問,無需公網IP和路由器設置的完美解決方案

文章目錄 前言1.安裝Node.js環境2.創建node.js服務3. 訪問node.js 服務4.內網穿透4.1 安裝配置cpolar內網穿透4.2 創建隧道映射本地端口 5.固定公網地址 前言 Node.js 是能夠在服務器端運行 JavaScript 的開放源代碼、跨平臺運行環境。Node.js 由 OpenJS Foundation&#xff0…

ESP32網絡編程-OTA方式升級固件(基于Web瀏覽器)

OTA方式升級固件(基于Web瀏覽器) 文章目錄 OTA方式升級固件(基于Web瀏覽器)1、ESP32的OTA介紹2、OTA升級固件方式3、軟件準備4、硬件準備5、代碼實現6、一種優雅方式實現Web方式OTA升級6.1 基礎OTA代碼6.2 新固件庫代碼在前面的文章中,我們在Arduino IDE的網絡端口中,實現…

LeetCode 77.組合

題目&#xff1a; 給定兩個整數 n 和 k&#xff0c;返回范圍 [1, n] 中所有可能的 k 個數的組合。 你可以按 任何順序 返回答案。 方法&#xff1a;靈神-組合型回溯 剪枝 class Solution {private int k;private final List<Integer> path new ArrayList<>();…

反序列化 [網鼎杯 2020 朱雀組]phpweb 1

打開題目 我們發現這個頁面一直在不斷的刷新 我們bp抓包一下看看 我們發現index.php用post方式傳了兩個參數上去&#xff0c;func和p 我們需要猜測func和p兩個參數之間的關系&#xff0c;可以用php函數MD5測一下看看 我們在響應處得到了一串密文&#xff0c;md5解密一下看看 發…

Windows11安裝使用Oracle21C詳細步驟<圖文保姆級>新版本

Windows11安裝使用Oracle21C詳細步驟<圖文保姆級>新版本 Database Software Downloads | Oracle 中國 下載完成后解壓縮 雙擊setup.exe 打開安裝頁面 同意下一步 更改自己的路徑點擊下一步 輸入密碼 下一步安裝等待即可 等待加載配置時間有點久 完成即可 使用 搜索…

【Kubernetes】四層代理Service

Service四層代理 一、Service概念原理1.1、為什么要有Service1.2、Service概述1.3、工作原理1.4、三類IP地址【1】Node Network&#xff08;節點網絡&#xff09;【2】Pod network&#xff08;pod 網絡&#xff09;【3】Cluster Network&#xff08;服務網絡&#xff09; 二、S…

C++之異常處理

C語言傳統的處理錯誤的方式 傳統的錯誤處理機制&#xff1a; 1. 終止程序, 如assert. 缺陷: 用戶難以接受, 如發生內存錯誤, 除0錯誤時就會終止程序. 如果assert括號里面的表達式結果為假, 那么assert就會中斷程序并報錯, 所以使用assert可以幫助我們在程序判斷一些可能出錯的…

翻轉二叉樹(圖解、前序遍歷、遞歸與非遞歸)

LCR 144. 翻轉二叉樹 - 力扣&#xff08;LeetCode&#xff09; 給定一棵二叉樹的根節點 root&#xff0c;請左右翻轉這棵二叉樹&#xff0c;并返回其根節點。 示例 1&#xff1a; 輸入&#xff1a;root [5,7,9,8,3,2,4] 輸出&#xff1a;[5,9,7,4,2,3,8] 提示&#xff1a; …

【11】Qt Designer

目錄 VSCode添加外部工具 QtDesigner PyUIC PyRCC 加載UI文件模板代碼 QMainWindow QWidget 常用知識點 1. 修改標題圖標 2. 圖片資源管理 3. 圖片按鈕 4. 加載對話框 5. 動態加載Widget 6. 修改主題 其他注意事項 事件被多次觸發 PyQt5提供了一個可視化圖形工…

【小沐學Python】Python實現WebUI網頁圖表(gradio)

文章目錄 1、簡介2、安裝3、基本測試3.1 入門代碼3.2 組件屬性3.3 多個輸入和輸出組件3.4 圖像示例3.5 聊天機器人3.6 模塊&#xff1a;更靈活、更可控3.7 進度條 結語 1、簡介 https://www.gradio.app/ Gradio是用友好的網絡界面演示機器學習模型的最快方法&#xff0c;因此…

【T+】暢捷通T+軟件安裝過程中停留在:正在配置產品位置或進度80%位置。

【問題描述】 暢捷通T軟件在安裝過程中&#xff0c; 進度條一直停留在【正在配置產品…】位置。 【解決方法】 打開【任務管理器】&#xff0c;想必這個如何打開&#xff0c;大家應該都會。 在【進程】中找到【DBConfig.exe】或者【Ufida.T.Tool.SM.DBConfig.exe】進程并結束…

TS條件類型、斷言及名義類型

文章將討論處理類型的幾個高級模式&#xff0c;包括模擬名義類型的類型烙印、利用條件類型的分配性質在類型層面操作類型&#xff0c;以及安全地擴展原型。 1 函數類型 TS在推導元組的類型時會放寬要求&#xff0c;推導出的結果盡量寬泛&#xff0c;不在乎元組的長度和各位置…

Spring Cloud Gateway使用和配置

Spring Cloud Gateway是Spring官方基于Spring 5.0&#xff0c;Spring Boot 2.0和Project Reactor等技術開發的網關&#xff0c;Spring Cloud Gateway旨在為微服務架構提供一種簡單而有效的統一的API路由管理方式。Spring Cloud Gateway作為Spring Cloud生態系中的網關&#xff…

Linux 基礎IO

文章目錄 前言基礎IO定義系統IO接口文件描述符重定向原理緩沖區刷新 前言 要知道每個函數/接口的全部參數和返回值建議去官網或者直接在Linux的man手冊中查&#xff0c;這不是復制粘貼函數用法的文章。 C語言文件讀寫介紹鏈接 基礎IO定義 IO是Input/Output的縮寫&#xff0c…

optional

參考資料&#xff1a; Java8 Optional用法和最佳實踐 - 掘金 一、背景 根據Oracle文檔&#xff0c;Optional是一個容器對象&#xff0c;可以包含也可以不包含非null值。Optional在Java 8中引入&#xff0c;目的是解決 NullPointerExceptions的問題。本質上&#xff0c;Optio…