美文网首页互联网科技软件测试
【技术笔记】简述性能神器wrk的原理和实际案例中的运用

【技术笔记】简述性能神器wrk的原理和实际案例中的运用

作者: 六月雨June | 来源:发表于2019-12-12 17:37 被阅读0次

最近笔者继续研究性能测试领域,发现了一款性能神器wrk。大家可能都比较熟悉的是Loadrunner和Jmeter,但其实wrk也相当好用。

什么是wrk?

这里有一段是来自GitHub的wrk项目的介绍英文原话:

wrk is a modern HTTP benchmarking tool capable of generating significant load when run on a single multi-core CPU. It combines a multithreaded design with scalable event notification systems such as epoll and kqueue.

大概意思就是wrk是一个基于HTTP的基准测试工具,可以用来跑单个的多核CPU,可以形成很有效的负载。它将多线程设计与可伸缩的事件通知系统,比如epoll和kQueue,结合在一起。

wrk的安装

首先介绍一下wrk的安装,在windows上安装会比较麻烦,建议用Linux系统上安装使用会非常简便。笔者就以自己的腾讯云服务器为例,进行了一次安装。

我们可以在全球最大同性交友网站找到wrk的源码和地址, 然后复制上面的地址,拷贝到我们的Linux系统上。

在命令行上输入命令:$git clone https://github.com/wg/wrk.git

这样就在我们的系统上拷贝了一份安装和源码备份,接着我们进入到新创建的wrk目录。

输入:$ cd wrk

然后我们可以从GitHub的wrk的使用说明上面可以看到:

wrk should build on most UNIX-like operating systems and architectures that have GNU make and are supported by LuaJIT and OpenSSL. Some systems may require additional CFLAGS or LDFLAGS, see the top of the Makefile for examples, in many cases simply running `make` (often `gmake` on *BSD) will do the trick.

其实安装开启的核心非常简单,只需要一个make命令就足够了,是不是足够简单?

输入:$ make

接下来就是漫长的编译过程,编译完后我们可以查看一下。

编译完成后就是要安装,最简单的方式是拷贝到bin目录来使用。

输入:$ cp wrk/usr/local/bin/

但是我的系统说不允许这样操作,有可能是腾讯云的服务器不允许我这样操作。但接着他推荐了另一个方式,我们来试试。

输入: $ sudo apt install wrk

看起来是成功执行了,等稳定下来之后我们来检查下是否安装成功了。

输入:$ wrk

OK!安装成功了!

简述wrk的工作原理

wrk实际是用了一种叫做多路复用IO(IO multiplexing)的技术。IO multiplexing这个词可能大家有点陌生,但是如果我说select/epoll,可能大家就没那么陌生。有些地方也称这种IO方式为事件驱动IO(event driven IO)。select/epoll的好处就在于单个process就可以同时处理多个网络连接的IO。它的基本原理就是select/epoll这个function会不断的轮询所负责的所有socket,当某个socket有数据到达了,就通知用户进程。

当用户进程调用了select,那么整个进程会被block,而同时,kernel会“监视”所有select负责的socket,当任何一个socket中的数据准备好了,select就会返回。这个时候用户进程再调用read操作,将数据从kernel拷贝到用户进程。

要注意的是,如果处理的连接数不是很高的话,使用select/epoll的web server不一定比使用multi-threading + blocking IO的web server性能更好,可能延迟还更大。select/epoll的优势并不是对于单个连接能处理得更快,而是在于能处理更多的连接。在多路复用模型中,对于每一个socket,一般都设置成为non-blocking。

select的优势在于可以处理多个连接,不适用于单个连接。

wrk在实际案例中的运用

wrk最主要有以下的三种命令用法:

-c: 表示总共的连接数

-d: 表示要运行的测试时间

-t: 表示线程数

接下来我们进行一个小小的案例展示,首先创建一个index.html文件,往里面写一些内容,形成一个简单的网站,我用以下的命令实现:

小网站创建完成后,查看一下我们的Linux系统的Python版本是多少,笔者的是2.x版本,所以要用以下命令,来启动Python服务:

如果是3.x版本,则要输入以下命令:

$ python -m http.server 8888

同样可以启动Python服务。接下来我们另开一个终端,输入以下命令:

这样就成功访问到了我们服务器下创建的index.html文件。接下来我们尝试来用wrk来压测这个服务器文件,输入命令:

$ wrk -c20 -t2 -d10s http://localhost:8888/index.html

由于笔者的服务器是比较低端入门级的,所以不敢压太狠,所以只建立了20个连接数,2个线程数,压10秒,之后就可以在我们之前启动Python服务那个终端看到压测的过程。

压测完成后,我们回到前一个终端,就可以看到测试数据已经形成了:

我们可以看看这份迷你报告来进行分析:

Latency是表示时延,Avg是它的平均值,Stdev是一个标准差,Max是最大值,+/- Stdev是标准差范围,一般来说标准差的百分比越高,表示值和平均值的差不大,离散的也不会很大,表示Avg平均值还是相当可信。

数据里主要看到QPS的值,这个核心数据,我压出来的结果是有点压垮服务器了,1558.86应该不算高的值,实在是硬件条件不高的服务器。那QPS就是通过requests/sec运算来得出。

关于wrk的基本用法就介绍完了,更高级的玩法我们下次分解。


读更多的好书,拍更美的照片,写更酷的代码,遇见更有趣的人,愿望是实现从IT菜鸟到全栈工程师的蜕变。

相关文章

  • 【技术笔记】简述性能神器wrk的原理和实际案例中的运用

    最近笔者继续研究性能测试领域,发现了一款性能神器wrk。大家可能都比较熟悉的是Loadrunner和Jmeter,...

  • 大型网站技术架构(四)高性能

    大型网站技术架构核心原理与案例分析 读书笔记 高性能架构 内容导读: 常见的性能测试指标和性能测试方法; Web前...

  • 大型网站技术架构(三)要素

    大型网站技术架构核心原理与案例分析 读书笔记 大型网站核心架构要素 性能 可用性 伸缩性 扩展性 安全性 一、性能...

  • web前端性能优化

    本文为读《大型网站技术架构-核心原理与案例分析》(作者李智慧)的笔记,摘抄。 web前端性能优化 浏览器访问优化1...

  • 第5节催眠原理实际运用简述

    如果从催眠角度来看,人的一切行为情绪都是催眠的结果。在浅层上可以归纳为已经被普遍认可的潜移默化作用。现代人已经深刻...

  • 接口测试工具——soapUI

    界面: 标签:接口测试,性能测试,开源 简述:SoapUI,著名的接口测试和性能测试工具,jav技术栈开发,UI精...

  • 01数字电路入门知识

    电子技术是根据电子学的原理,运用电子器件设计和制造某种特定功能的电路以解决实际问题的科学,包括信息电子技术和电力电...

  • 立体裁剪:小礼服.01

    刘同学:礼服作品 技术原理:运用到款式.造型 刘同学:小礼服. 作品 技术原理:运用到款式.造型

  • 来自于K先生的配色法则

    本文主要介绍配色四分法的原理以及在实际案例中的运用。 这个配色法具有很强的操作性,因为它不是纯粹的理论,而是在设计...

  • 今日得到20170729-关于命运主题的回顾

    一、“四念住”的实际运用 案例:一个心理咨询师和妻子吵架。 分析过程: 1、具体化技术。 ——情绪情感:感到恐惧、...

网友评论

    本文标题:【技术笔记】简述性能神器wrk的原理和实际案例中的运用

    本文链接:https://www.haomeiwen.com/subject/jfrogctx.html