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

最近笔者继续研究性能测试领域,发现了一款性能神器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菜鸟到全栈工程师的蜕变。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,695评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,569评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,130评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,648评论 1 297
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,655评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,268评论 1 309
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,835评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,740评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,286评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,375评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,505评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,185评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,873评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,357评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,466评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,921评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,515评论 2 359

推荐阅读更多精彩内容

  • 2018-11-06 这一块操作系统主要分为两个部分,一个部分是书本上操作系统的知识,还有一部门是linux的相关...
    zuoerfeng阅读 2,231评论 0 1
  • 本文摘抄自linux基础编程 IO概念 Linux的内核将所有外部设备都可以看做一个文件来操作。那么我们对与外部设...
    VD2012阅读 1,021评论 0 2
  • 必备的理论基础 1.操作系统作用: 隐藏丑陋复杂的硬件接口,提供良好的抽象接口。 管理调度进程,并将多个进程对硬件...
    drfung阅读 3,546评论 0 5
  • python之路——IO模型 IO模型介绍 为了更好地了解IO模型,我们需要事先回顾下:同步、异步、阻塞、非阻塞 ...
    go以恒阅读 545评论 0 2
  • IO概念 Linux的内核将所有外部设备都可以看做一个文件来操作。那么我们对与外部设备的操作都可以看做对文件进行操...
    消失er阅读 1,885评论 0 5