前言

测试平台介绍

压力测试工具介绍

应用名为 wrk 的压力测试工具

参考文章:

ubuntu20.04 装置 wrk 压力测试工具以及简略应用

纯 Nginx

筹备工作

装置 Nginx

sudo apt install nginx

替换默认的介绍页

location / {    #设置content type    default_type text/html ;    # HTTP Status Code 和 内容     return 200  "hello world! ";}

【Nginx】输入/返回 HelloWorld

重启 Nginx

sudo service nginx restart

查看 Nginx 状态:

─$ sudo service nginx status ● nginx.service - A high performance web server and a reverse proxy server     Loaded: loaded (/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)     Active: active (running) since Tue 2022-01-04 22:44:13 CST; 1s ago       Docs: man:nginx(8)    Process: 11215 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0>    Process: 11216 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)   Main PID: 11217 (nginx)      Tasks: 17 (limit: 3391)     Memory: 17.6M        CPU: 95ms     CGroup: /system.slice/nginx.service             ├─11217 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"             ├─11218 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ">             ├─11219 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ">             ├─11220 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ">             ├─11221 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ">             ├─11222 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ">             ├─11223 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ">             ├─11224 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ">             ├─11226 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ">             ├─11227 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ">             ├─11228 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ">             ├─11229 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ">             ├─11230 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ">             ├─11231 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ">             ├─11232 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ">             ├─11233 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ">             └─11234 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ">1月 04 22:44:13 kali systemd[1]: Starting A high performance web server and a reverse proxy server...1月 04 22:44:13 kali systemd[1]: Started A high performance web server and a reverse proxy server.

开始测试

测试1

wrk http://192.168.31.95 -t 16 -c 64 -d 10

测试后果

─➤  ./wrk http://192.168.31.95  -t16 -c64  -d 10                                                                                 Running 10s test @ http://192.168.31.95  16 threads and 64 connections  Thread Stats   Avg      Stdev     Max   +/- Stdev    Latency     5.85ms    3.72ms  48.92ms   82.33%    Req/Sec   708.88    348.74     1.48k    67.47%  113734 requests in 10.09s, 17.35MB readRequests/sec:  11271.96Transfer/sec:      1.72MB

测试2

wrk http://192.168.31.95  -t32 -c160  -d 10

测试后果

─➤  ./wrk http://192.168.31.95  -t32 -c160  -d 10Running 10s test @ http://192.168.31.95  32 threads and 160 connections  Thread Stats   Avg      Stdev     Max   +/- Stdev    Latency     8.00ms    6.31ms  69.27ms   84.35%    Req/Sec   701.97    395.33     1.29k    47.11%  225052 requests in 10.07s, 34.33MB readRequests/sec:  22349.79Transfer/sec:      3.41MB

测试3

wrk http://192.168.31.95  -t64 -c320  -d 10

测试后果

─➤  ./wrk http://192.168.31.95  -t64 -c320  -d 10Running 10s test @ http://192.168.31.95  64 threads and 320 connections  Thread Stats   Avg      Stdev     Max   +/- Stdev    Latency    14.08ms    9.75ms  84.81ms   87.53%    Req/Sec   384.02    157.25     1.03k    66.21%  246408 requests in 10.07s, 37.59MB readRequests/sec:  24458.27Transfer/sec:      3.73MB

纯 Gunicoen

from flask import Flaskapp = Flask(__name__)@app.route('/', methods=['GET'])def home():    success: bool = False    return {        'status': success    }@app.route('/upload/', methods=['POST'])def hello():    success: bool = False    return {        'status': success    }

纯多过程模式

import multiprocessingbind = "0.0.0.0:63000"workers = 32

运行 Gunicorn

─$ gunicorn fapi:app -c gunicorn.conf.py[2022-01-04 22:53:08 +0800] [11519] [INFO] Starting gunicorn 20.1.0[2022-01-04 22:53:09 +0800] [11519] [INFO] Listening at: http://0.0.0.0:63000 (11519)[2022-01-04 22:53:09 +0800] [11519] [INFO] Using worker: sync[2022-01-04 22:53:09 +0800] [11520] [INFO] Booting worker with pid: 11520[2022-01-04 22:53:09 +0800] [11521] [INFO] Booting worker with pid: 11521[2022-01-04 22:53:09 +0800] [11522] [INFO] Booting worker with pid: 11522[2022-01-04 22:53:09 +0800] [11523] [INFO] Booting worker with pid: 11523[2022-01-04 22:53:09 +0800] [11524] [INFO] Booting worker with pid: 11524[2022-01-04 22:53:09 +0800] [11525] [INFO] Booting worker with pid: 11525[2022-01-04 22:53:09 +0800] [11526] [INFO] Booting worker with pid: 11526[2022-01-04 22:53:09 +0800] [11527] [INFO] Booting worker with pid: 11527[2022-01-04 22:53:09 +0800] [11528] [INFO] Booting worker with pid: 11528[2022-01-04 22:53:09 +0800] [11529] [INFO] Booting worker with pid: 11529[2022-01-04 22:53:09 +0800] [11530] [INFO] Booting worker with pid: 11530[2022-01-04 22:53:09 +0800] [11531] [INFO] Booting worker with pid: 11531[2022-01-04 22:53:09 +0800] [11532] [INFO] Booting worker with pid: 11532[2022-01-04 22:53:09 +0800] [11533] [INFO] Booting worker with pid: 11533[2022-01-04 22:53:09 +0800] [11534] [INFO] Booting worker with pid: 11534[2022-01-04 22:53:09 +0800] [11535] [INFO] Booting worker with pid: 11535[2022-01-04 22:53:09 +0800] [11536] [INFO] Booting worker with pid: 11536[2022-01-04 22:53:09 +0800] [11537] [INFO] Booting worker with pid: 11537[2022-01-04 22:53:10 +0800] [11538] [INFO] Booting worker with pid: 11538[2022-01-04 22:53:10 +0800] [11539] [INFO] Booting worker with pid: 11539[2022-01-04 22:53:10 +0800] [11540] [INFO] Booting worker with pid: 11540[2022-01-04 22:53:10 +0800] [11541] [INFO] Booting worker with pid: 11541[2022-01-04 22:53:10 +0800] [11542] [INFO] Booting worker with pid: 11542[2022-01-04 22:53:10 +0800] [11543] [INFO] Booting worker with pid: 11543[2022-01-04 22:53:10 +0800] [11544] [INFO] Booting worker with pid: 11544[2022-01-04 22:53:10 +0800] [11545] [INFO] Booting worker with pid: 11545[2022-01-04 22:53:10 +0800] [11546] [INFO] Booting worker with pid: 11546[2022-01-04 22:53:10 +0800] [11547] [INFO] Booting worker with pid: 11547[2022-01-04 22:53:10 +0800] [11548] [INFO] Booting worker with pid: 11548[2022-01-04 22:53:10 +0800] [11549] [INFO] Booting worker with pid: 11549[2022-01-04 22:53:10 +0800] [11550] [INFO] Booting worker with pid: 11550[2022-01-04 22:53:10 +0800] [11551] [INFO] Booting worker with pid: 11551

进行压力测试

wrk http://192.168.31.95:63000  -t64 -c320  -d 10

测试后果

─➤  ./wrk http://192.168.31.95:63000  -t64 -c320  -d 10                                                                                             1 ↵Running 10s test @ http://192.168.31.95:63000  64 threads and 320 connections  Thread Stats   Avg      Stdev     Max   +/- Stdev    Latency    76.09ms   37.75ms 664.24ms   71.68%    Req/Sec    33.70     17.98   191.00     75.18%  21342 requests in 10.09s, 3.30MB readRequests/sec:   2115.13Transfer/sec:    334.65KB

纯多线程模式

import multiprocessingbind = "0.0.0.0:63000"threads = 32

运行 Gunicorn

─$ gunicorn fapi:app -c gunicorn.conf.py[2022-01-04 22:57:38 +0800] [11607] [INFO] Starting gunicorn 20.1.0[2022-01-04 22:57:38 +0800] [11607] [INFO] Listening at: http://0.0.0.0:63000 (11607)[2022-01-04 22:57:38 +0800] [11607] [INFO] Using worker: gthread[2022-01-04 22:57:38 +0800] [11608] [INFO] Booting worker with pid: 11608

进行压力测试

wrk http://192.168.31.95:63000  -t64 -c320  -d 10

测试后果

─➤  ./wrk http://192.168.31.95:63000  -t64 -c320  -d 10Running 10s test @ http://192.168.31.95:63000  64 threads and 320 connections  Thread Stats   Avg      Stdev     Max   +/- Stdev    Latency   122.28ms  109.01ms   2.00s    98.58%    Req/Sec    42.33     22.31   303.00     75.49%  8888 requests in 10.08s, 1.42MB read  Socket errors: connect 0, read 0, write 0, timeout 73Requests/sec:    881.68Transfer/sec:    143.80KB

多线程和多过程混合模式

测试一:

import multiprocessingbind = "0.0.0.0:63000"workers = 8threads = 8

运行 Gunicorn

─$ gunicorn fapi:app -c gunicorn.conf.py                                                               130 ⨯[2022-01-04 22:59:45 +0800] [11668] [INFO] Starting gunicorn 20.1.0[2022-01-04 22:59:45 +0800] [11668] [INFO] Listening at: http://0.0.0.0:63000 (11668)[2022-01-04 22:59:45 +0800] [11668] [INFO] Using worker: gthread[2022-01-04 22:59:45 +0800] [11669] [INFO] Booting worker with pid: 11669[2022-01-04 22:59:45 +0800] [11670] [INFO] Booting worker with pid: 11670[2022-01-04 22:59:45 +0800] [11671] [INFO] Booting worker with pid: 11671[2022-01-04 22:59:45 +0800] [11672] [INFO] Booting worker with pid: 11672[2022-01-04 22:59:46 +0800] [11673] [INFO] Booting worker with pid: 11673[2022-01-04 22:59:46 +0800] [11674] [INFO] Booting worker with pid: 11674[2022-01-04 22:59:46 +0800] [11675] [INFO] Booting worker with pid: 11675[2022-01-04 22:59:46 +0800] [11676] [INFO] Booting worker with pid: 11676

进行压力测试

wrk http://192.168.31.95:63000  -t64 -c320  -d 10

测试后果

─➤  ./wrk http://192.168.31.95:63000  -t64 -c320  -d 10Running 10s test @ http://192.168.31.95:63000  64 threads and 320 connections  Thread Stats   Avg      Stdev     Max   +/- Stdev    Latency    74.25ms   24.12ms 304.79ms   72.75%    Req/Sec    67.53     17.83   171.00     77.02%  43368 requests in 10.10s, 6.91MB readRequests/sec:   4293.70Transfer/sec:    700.34KB

测试二:

import multiprocessingbind = "0.0.0.0:63000"workers = 16threads = 16

进行压力测试

wrk http://192.168.31.95:63000  -t64 -c320  -d 10

测试后果

─➤  ./wrk http://192.168.31.95:63000  -t64 -c320  -d 10Running 10s test @ http://192.168.31.95:63000  64 threads and 320 connections  Thread Stats   Avg      Stdev     Max   +/- Stdev    Latency    63.56ms   32.04ms 242.04ms   80.12%    Req/Sec    82.27     29.26   180.00     69.46%  51927 requests in 10.08s, 8.27MB readRequests/sec:   5150.42Transfer/sec:    840.00KB

测试三:

import multiprocessingbind = "0.0.0.0:63000"workers = 8threads = 32

进行压力测试

wrk http://192.168.31.95:63000  -t64 -c320  -d 10

测试后果

─➤  ./wrk http://192.168.31.95:63000  -t64 -c320  -d 10Running 10s test @ http://192.168.31.95:63000  64 threads and 320 connections  Thread Stats   Avg      Stdev     Max   +/- Stdev    Latency    80.44ms   31.75ms 515.60ms   90.45%    Req/Sec    63.91     16.65   232.00     87.49%  40686 requests in 10.07s, 6.48MB readRequests/sec:   4039.57Transfer/sec:    658.99KB

测试四:

import multiprocessingbind = "0.0.0.0:63000"workers = 16threads = 32

进行压力测试

wrk http://192.168.31.95:63000  -t64 -c320  -d 10

测试后果

─➤  ./wrk http://192.168.31.95:63000  -t64 -c320  -d 10Running 10s test @ http://192.168.31.95:63000  64 threads and 320 connections  Thread Stats   Avg      Stdev     Max   +/- Stdev    Latency    67.43ms   35.35ms 529.30ms   82.06%    Req/Sec    76.93     27.15   160.00     74.54%  49099 requests in 10.10s, 7.82MB readRequests/sec:   4861.03Transfer/sec:    792.80KB

Nginx 和 Gunicorn 混合模式