rk是一款簡單的HTTP壓測工具,當運行在單個多核CPU上時,它能夠產生巨大的負載。
github:https://github.com/wg/wrk
國內鏡像: https://gitee.com/mirrors/wrk
安裝:
git clone https://github.com/wg/wrk.git
cd wrk
make
# 將可執行文件移動到 /usr/local/bin 位置
sudo cp wrk /usr/local/bin
查看版本:
[root@node1 wrk]# wrk -v
wrk 4.1.0-8-ga211dd5 [epoll] Copyright (C) 2012 Will Glozer
Usage: wrk <options> <url>
Options:
-c, --connections <N> Connections to keep open
-d, --duration <T> Duration of test
-t, --threads <N> Number of threads to use
-s, --script <S> Load Lua script file
-H, --header <H> Add header to request
--latency Print latency statistics
--timeout <T> Socket/request timeout
-v, --version Print version details
Numeric arguments may include a SI unit (1k, 1M, 1G)
Time arguments may include a time unit (2s, 2m, 2h)
可以看到wrk的用法,相對來說比較簡單;
接下來使用wrk來壓測下百度首頁,
使用20個線程100個連接進行30s的壓測:
wrk -t20 -c100 -d30s http://www.baidu.com
壓測下本地的接口:
wrk -t20 -c100 -d30s --latency http://127.0.0.1:9000
以上是wrk的基本用法,還可以使用lua腳本進行個性化壓測,有興趣的可以研究下。
原文鏈接:https://river106.cn/posts/3e707d63.html
介:隨著互聯網安全規范的普及,使用 HTTPS 技術進行通信加密,實現網站和 APP 的可信訪問,已經成為公認的安全標準。本文將介紹針對 HTTPS 協議做壓力測試的關注點,以及使用 PTS 做 HTTPS 壓測的技術優勢和最佳實踐。
作者:拂衣
隨著互聯網安全規范的普及,使用 HTTPS 技術進行通信加密,實現網站和 APP 的可信訪問,已經成為公認的安全標準。本文將介紹針對 HTTPS 協議做壓力測試的關注點,以及使用 PTS 做 HTTPS 壓測的技術優勢和最佳實踐。
常見的網站或者 APP 中需要做壓測的 3 種場景:
HTTPS 的英文全稱是:Hyper Text Transfer Protocol over Secure Socket Layer,它是以安全為目標的 HTTP 通道。從全稱上可以看出,它其實不是一種新的應用層協議,只是 HTTP 協議將通信接口用 SSL 替代了 TCP。HTTP 協議中,應用層 HTTP 直接與傳輸層 TCP 通信,在 HTTPS 協議中 ,應用層 HTTP 與 SSL 通信,SSL 再與傳輸層的 TCP 通信,具體如圖:
?HTTPS 通過 SSL 層的加密,可以防止網站被篡改和劫持。下面我們簡單看下 HTTPS 是如何進行加密解密的:
首先客戶端和服務端會協商加密算法和協議版本。協商結束后,服務端發送公鑰給客戶端,客戶端拿到公鑰后,生成一個隨機密碼串(Pre-master secret),并通過公鑰加密返回給服務端。服務端使用私鑰解密密文后,得到此隨機密碼串(Pre-master secret),之后通過協商的隨機數和加密算法,生成對稱加密密鑰。至此,雙方得到了同一個密鑰,后續使用此密鑰實現對稱加密解密。
?我們知道對稱加密性能更好,但只要持有密鑰,就能將劫持的密文解密,無法解決被劫持的問題。非對稱加密相對更安全,但同時加密解密性能開銷大。可以看出 HTTPS 在握手階段使用了非對稱加密,在后續的通信中使用了對稱加密,既保證了安全性,又最大限度保證了性能。
SSL 握手策略
HTTPS 在握手階段有加密解密的過程,所以相比 HTTP 更消耗計算資源。壓測引擎為了模擬海量用戶執行請求,往往底層會在全局或線程維度,復用 TCP 連接和 SSL 握手信息。這提高了施壓機的性能,但對希望每次循環模擬不同客戶端行為的場景來說,施壓機只模擬了足夠的流量壓力,并沒有模擬足夠的 SSL 握手計算壓力,可能造成壓力模擬不夠準確的問題,如下圖所示:
?因此,在 HTTPS 壓測中,需要根據壓測場景的具體業務邏輯,指定每次循環是否重置 SSL 握手狀態,準確模擬 SSL 握手計算壓力。
SSL 協議版本
HTTPS 壓測,在客戶端(施壓機)和服務端進行 SSL 握手的第一步,客戶端會告知給服務端自己支持的最高 SSL 協議版本,然后服務端會從自己和客戶端支持版本的交集中,取最高的版本作為實際使用的 SSL 版本。
在壓測時,需要評估出真實客戶端的主流版本,并配置到施壓引擎上。避免因 SSL 版本不同,造成 SSL 握手計算壓力模擬不準確。
JMeter、Gatling、K6 等開源壓測工具對 HTTPS 有不同程度的支持。JMeter[1]支持配置循環是否重置 SSL 握手狀態,并且支持配置客戶端 SSL 協議版本,但是默認不支持 HTTP2 協議。Gatling[2]默認每個虛擬用戶共享 SSL 上下文,不支持控制循環重置 SSL 握手狀態。K6[3]目前只支持設置 SSL 協議版本。
PTS 作為云上壓測工具,支持如下 HTTPS 相關特性:
使用 PTS 壓測,可以更真實的模擬客戶端發起的 HTTPS 壓力,使壓測結果更可信。
設置 SSL 握手策略
?對于 HTTPS 壓測,在串聯鏈路每次循環時,需要選擇是否重置 SSL 連接狀態。如果選擇重置,在串聯鏈路每一次循環執行時,會重新初始化 SSL 狀態,這樣可以更準確模擬每次循環代表不同用戶的壓測場景,同時會對施壓機帶來一定的性能開銷。
使用場景
設置 SSL 協議版本
這里列出一些常用瀏覽器對 SSL 版本的支持情況供您參考:
?可以看出,主流瀏覽器在 2018~2020 年前后都支持了 TLSv1.3。因此,如果您的壓測場景模擬的客戶端較新,建議您選擇 TLSv1.3 作為 SSL 版本;相反,如果您的壓測場景需要模擬舊版本的瀏覽器客戶端,建議您選擇 TLSv1.2 作為 SSL 版本。
如何錄制 HTTPS 流量
各壓測工具都提供了基于代理的流量錄制工具,方便錄制下客戶端的流量,并快速構建壓測腳本。對于 HTTPS 協議的錄制,除了配置代理,還需要信任證書,操作比較復雜。
PTS 提供了免配置證書的錄制方案:瀏覽器插件,支持快速錄制 HTTPS 流量,解密并轉換為 PTS 壓測場景,同時支持導出為 JMeter 腳本,歡迎下載[4]使用,詳細操作可參考文檔[5]。
?同時針對移動流量錄制,PTS 提供了云真機和本地設備 2 種方案。其中云真機已預置 PTS 代理配置,支持在瀏覽器操作手機,錄制流量,無需配置代理和證書,詳細操作可參考文檔[6]。
綜上,本文主要闡述了:
更多交流,歡迎進釘釘群溝通,PTS 用戶交流群號:11774967
同時,PTS 全新售賣方式來襲,基礎版價格直降 50%!百萬并發價格只需 6200!更有新用戶 0.99 體驗版、VPC 壓測專屬版,歡迎大家選購!
[1] JMeter(官方文檔):
https://jmeter.apache.org/usermanual/component_reference.html?spm=a2c6h.12873639.article-detail.4.6d4a7ca0EKzFeR#HTTP_Request
[2] Gatling(官方文檔):
https://gatling.io/docs/gatling/reference/current/http/ssl/
[3] K6:
https://k6.io/docs/using-k6/options/#tls-version
[4] 下載(PTS HTTPS錄制器插件):
https://chrome.google.com/webstore/detail/alibaba-cloud-pts%E5%BD%95%E5%88%B6%E5%99%A8/noonnhdncblnaknhoebaglpcihelliff
[5] 文檔(PTS 錄制器使用文檔—Chrome 瀏覽器場景):
https://help.aliyun.com/document_detail/187749.html
[6] 文檔(PTS 錄制器使用文檔—Android 手機端場景):
https://help.aliyun.com/document_detail/72519.html
[7] PTS HTTPS設置文檔:
https://help.aliyun.com/document_detail/143194.html
原文鏈接:301 Moved Permanently
本文為阿里云原創內容,未經允許不得轉載。
heck Web Performance 測試下網絡性能
下面都是一些在線的站點,可以嘗試看看,個人感覺還不錯。測試下網絡性能:
https://www.17ce.com
https://www.tingyun.com/tingyun_network.html
https://gtmetrix.com
https://tools.pingdom.com
https://www.dotcom-tools.com/website-speed-test.aspx
https://webspeedtest.cloudinary.com
https://www.webpagetest.org
https://www.dareboost.com/en/analysis
學習兩個壓測命令:
ab是apachebench命令的縮寫, 默認mac下都已經安裝了
? ~ /usr/sbin/ab --help
/usr/sbin/ab: wrong number of arguments
Usage: /usr/sbin/ab [options] [http[s]://]hostname[:port]/path
Options are:
-n requests Number of requests to perform
-c concurrency Number of multiple requests to make at a time
-t timelimit Seconds to max. to spend on benchmarking
This implies -n 50000
-s timeout Seconds to max. wait for each response
Default is 30 seconds
-b windowsize Size of TCP send/receive buffer, in bytes
-B address Address to bind to when making outgoing connections
-p postfile File containing data to POST. Remember also to set -T
-u putfile File containing data to PUT. Remember also to set -T
-T content-type Content-type header to use for POST/PUT data, eg.
'application/x-www-form-urlencoded'
Default is 'text/plain'
-v verbosity How much troubleshooting info to print
-w Print out results in HTML tables
-i Use HEAD instead of GET
-x attributes String to insert as table attributes
-y attributes String to insert as tr attributes
-z attributes String to insert as td or th attributes
-C attribute Add cookie, eg. 'Apache=1234'. (repeatable)
-H attribute Add Arbitrary header line, eg. 'Accept-Encoding: gzip'
Inserted after all normal header lines. (repeatable)
-A attribute Add Basic WWW Authentication, the attributes
are a colon separated username and password.
-P attribute Add Basic Proxy Authentication, the attributes
are a colon separated username and password.
-X proxy:port Proxyserver and port number to use
-V Print version number and exit
-k Use HTTP KeepAlive feature
-d Do not show percentiles served table.
-S Do not show confidence estimators and warnings.
-q Do not show progress when doing more than 150 requests
-l Accept variable document length (use this for dynamic pages)
-g filename Output collected data to gnuplot format file.
-e filename Output CSV file with percentages served
-r Don't exit on socket receive errors.
-m method Method name
-h Display usage information (this message)
-I Disable TLS Server Name Indication (SNI) extension
-Z ciphersuite Specify SSL/TLS cipher suite (See openssl ciphers)
-f protocol Specify SSL/TLS protocol
(TLS1, TLS1.1, TLS1.2 or ALL)
-E certfile Specify optional client certificate chain and private key
? ~ /usr/sbin/ab -n 100 -c 5 http://www.baidu.com/
This is ApacheBench, Version 2.3 <$Revision: 1843412 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking www.baidu.com (be patient).....done
Server Software: BWS/1.1
Server Hostname: www.baidu.com
Server Port: 80
Document Path: /
Document Length: 280696 bytes
Concurrency Level: 5
Time taken for tests: 6.152 seconds
Complete requests: 100
Failed requests: 96
(Connect: 0, Receive: 0, Length: 96, Exceptions: 0)
Total transferred: 28187420 bytes
HTML transferred: 28071381 bytes
Requests per second: 16.25 [#/sec] (mean)
Time per request: 307.617 [ms] (mean)
Time per request: 61.523 [ms] (mean, across all concurrent requests)
Transfer rate: 4474.20 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 34 52 19.6 46 152
Processing: 151 248 60.5 233 443
Waiting: 37 57 20.6 51 151
Total: 186 300 67.6 286 504
Percentage of the requests served within a certain time (ms)
50% 286
66% 323
75% 341
80% 354
90% 392
95% 443
98% 502
99% 504
100% 504 (longest request)
推薦另一個個人感覺這個更好用一些
brew search wrk
==> Formulae
wrk ? wrk-trello
brew install wrk 來安裝
*請認真填寫需求信息,我們會在24小時內與您取得聯系。