網站首頁 編程語言 正文
前言
在項目正式上線之前,我們通常需要通過壓測來評估當前系統能夠支撐的請求量、排查可能存在的隱藏bug,同時了解了程序的實際處理能力能夠幫我們更好的匹配項目的實際需求,節約資源成本。
壓測相關術語
- 響應時間(RT) :指系統對請求作出響應的時間.
- 吞吐量(Throughput) :指系統在單位時間內處理請求的數量
- QPS每秒查詢率(Query Per Second) :“每秒查詢率”,是一臺服務器每秒能夠響應的查詢次數,是對一個特定的查詢服務器在規定時間內所處理流量多少的衡量標準。
- TPS(TransactionPerSecond):每秒鐘系統能夠處理的交易或事務的數量
- 并發連接數:某個時刻服務器所接受的請求總數
壓力測試工具
ab
ab全稱Apache Bench,是Apache自帶的性能測試工具。使用這個工具,只須指定同時連接數、請求數以及URL,即可測試網站或網站程序的性能。
通過ab發送請求模擬多個訪問者同時對某一URL地址進行訪問,可以得到每秒傳送字節數、每秒處理請求數、每請求處理時間等統計數據。
命令格式:
ab [options] [http://]hostname[:port]/path
常用參數如下:
-n requests 總請求數 -c concurrency 一次產生的請求數,可以理解為并發數 -t timelimit 測試所進行的最大秒數, 可以當做請求的超時時間 -p postfile 包含了需要POST的數據的文件 -T content-type POST數據所使用的Content-type頭信息
更多參數請查看官方文檔。
例如測試某個GET請求接口:
ab -n 10000 -c 100 -t 10 "http://127.0.0.1:8080/api/v1/posts?size=10"
測試POST請求接口:
ab -n 10000 -c 100 -t 10 -p post.json -T "application/json" "http://127.0.0.1:8080/api/v1/post"
wrk
wrk是一款開源的HTTP性能測試工具,它和上面提到的ab
同屬于HTTP性能測試工具,它比ab
功能更加強大,可以通過編寫lua腳本來支持更加復雜的測試場景。
Mac下安裝:
brew install wrk
常用命令參數:
-c --conections:保持的連接數 -d --duration:壓測持續時間(s) -t --threads:使用的線程總數 -s --script:加載lua腳本 -H --header:在請求頭部添加一些參數 --latency 打印詳細的延遲統計信息 --timeout 請求的最大超時時間(s)
使用示例:
wrk -t8 -c100 -d30s --latency http://127.0.0.1:8080/api/v1/posts?size=10
輸出結果:
Running 30s test @ http://127.0.0.1:8080/api/v1/posts?size=10 8 threads and 100 connections Thread Stats Avg Stdev Max +/- Stdev Latency 14.55ms 2.02ms 31.59ms 76.70% Req/Sec 828.16 85.69 0.97k 60.46% Latency Distribution 50% 14.44ms 75% 15.76ms 90% 16.63ms 99% 21.07ms 198091 requests in 30.05s, 29.66MB read Requests/sec: 6592.29 Transfer/sec: 0.99MB
go-wrk
go-wrk是Go語言版本的wrk
,Windows同學可以使用它來測試,使用如下命令來安裝go-wrk
:
go get github.com/adeven/go-wrk
使用方法同wrk
類似,基本格式如下:
go-wrk [flags] url
常用的參數:
-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的頻率
執行測試:
go-wrk -t=8 -c=100 -n=10000 "http://127.0.0.1:8080/api/v1/posts?size=10"
輸出結果:
==========================BENCHMARK========================== URL: http://127.0.0.1:8080/api/v1/posts?size=10 Used Connections: 100 Used Threads: 8 Total number of calls: 10000 ===========================TIMINGS=========================== Total time passed: 2.74s Avg time per request: 27.11ms Requests per second: 3644.53 Median time per request: 26.88ms 99th percentile time: 39.16ms Slowest time for request: 45.00ms =============================DATA============================= Total response body sizes: 340000 Avg response body per request: 34.00 Byte Transfer rate per second: 123914.11 Byte/s (0.12 MByte/s) ==========================RESPONSES========================== 20X Responses: 10000 (100.00%) 30X Responses: 0 (0.00%) 40X Responses: 0 (0.00%) 50X Responses: 0 (0.00%) Errors: 0 (0.00%)
原文鏈接:https://www.cnblogs.com/guyouyin123/p/14582577.html
相關推薦
- 2022-07-15 Python中的//符號是什么意思呢_python
- 2022-08-06 winform把Office轉成PDF文件_C#教程
- 2022-06-02 Swift中類與結構的初始化示例解析_Swift
- 2022-11-30 關于頁面加載即執行JQuery的三種方法小結_jquery
- 2022-07-29 C++超詳細講解數組操作符的重載_C 語言
- 2022-04-24 Python元素集合的列表切片_python
- 2022-06-19 docker容器非root用戶提權的問題解決_docker
- 2022-07-24 C語言與C++中關于字符串使用的比較_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支