LoliMashiro
二次元真是太美好了呜~~
LoliMashiro

使用wrk工具对网站进行压测

使用wrk工具对网站进行压测

1、介绍

wrk是一个针对Http(s)协议的测试工具m它能够在单机多核 CPU 的条件下,使用系统自带的高性能 I/O 机制,如 epoll,kqueue 等,通过多线程和事件模式,对目标机器进行压测,在github上的star足足有3k。

2、编译安装

依次执行以下命令即可

Ubuntu/Debian
keyboard_arrow_down
sudo apt-get install build-essential libssl-dev git -y
git clone https://github.com/wg/wrk.git wrk
cd wrk
make
CentOS
keyboard_arrow_down
sudo yum groupinstall 'Development Tools'
sudo yum install -y openssl-devel git 
git clone https://github.com/wg/wrk.git wrk
cd wrk
make

如果不想每次使用都进入到wrk的目录运行以下命令即可

sudo cp wrk /usr/local/bin

完成后,来检查一下是否安装成功

https://mashiro.pub/wp-content/uploads/2022/08/image-6.png

3、使用

简单例子(使用 wrk 对 mashiro.pub 发起压测,线程为4,并发360,持续10秒。)

wrk -t4 -c360 -d10s https://mashiro.pub
https://mashiro.pub/wp-content/uploads/2022/08/image-7.png

可以看到,对本网站造成了40MB的暴击,平均每秒发起163个请求,平均的流量为4.03MB

4、拓展

在官方的github上,可以了解到wrk支持Lua脚本进行复杂的压测,wrk 支持在三个阶段对压测进行个性化,分别是启动阶段、运行阶段和结束阶段。每个测试线程,都拥有独立的Lua 运行环境。

启动阶段:

function setup(thread)

在脚本文件中实现 setup 方法,wrk 就会在测试线程已经初始化,但还没有启动的时候调用该方法。wrk会为每一个测试线程调用一次 setup 方法,并传入代表测试线程的对象 thread 作为参数。setup 方法中可操作该 thread 对象,获取信息、存储信息、甚至关闭该线程。

thread.addr             - get or set the thread's server address
thread:get(name)        - get the value of a global in the thread's env
thread:set(name, value) - set the value of a global in the thread's env
thread:stop()           - stop the thread

运行阶段:

function init(args)
function delay()
function request()
function response(status, headers, body)

init(args): 由测试线程调用,只会在进入运行阶段时,调用一次。支持从启动 wrk 的命令中,获取命令行参数;
delay(): 在每次发送请求之前调用,如果需要定制延迟时间,可以在这个方法中设置;
request(): 用来生成请求, 每一次请求都会调用该方法,所以注意不要在该方法中做耗时的操作;
response(status, headers, body): 在每次收到一个响应时被调用,为提升性能,如果没有定义该方法,那么wrk不会解析 headers 和 body

结束阶段:

function done(summary, latency, requests)

done() 方法在整个测试过程中只会被调用一次,我们可以从给定的参数中获取压测结果。

5、咕咕咕

由于篇幅限制(才怪 剩下的内容我会放在其他的文章

参考文档 : https://github.com/wg/wrk

lolimashiro

文章作者

发表回复

textsms
account_circle
email

LoliMashiro

使用wrk工具对网站进行压测
1、介绍 wrk是一个针对Http(s)协议的测试工具m它能够在单机多核 CPU 的条件下,使用系统自带的高性能 I/O 机制,如 epoll,kqueue 等,通过多线程和事件模式,对目标机器进行压测,在g…
扫描二维码继续阅读
2022-08-12