聊聊如何利用wrk进行压测初探

wrk简介

wrk 是一个能够在单个多核 CPU 上产生显著负载的现代 HTTP 基准测试工具。它采用了多线程设计,并使用了像 epoll 和 kqueue 这样的可扩展事件通知机制。此外,用户可以指定 LuaJIT 脚本来完成 HTTP 请求生成、响应处理和自定义报告等功能。

wrk 官网

https://github.com/wg/wrk

wrk安装

wrk支持linux安装,不支持windows安装。因此我们只能在linux环境下进行安装

安装步骤

1、下载wrk


git clone https://github.com/wg/wrk

2、切换到wrk目录,执行编译并安装


 cd wrk
 make

3、将可执行文件wrk复制到/usr/local/bin

cp wrk /usr/local/bin

wrk参数简介

输入命令

wrk --help

查看支持的相关参数

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)
  • -c 与服务器建立并保持的TCP连接数,其实就是并发数
  • -d 压测的持续时间(单位为秒),默认为 10s
  • -t 压测的线程数。正常设置为cpu核心线程数的2-4倍即可。如果线程数过多,会因线程上下文切换频繁,影响到压测效果
  • -s 指定Lua脚本路径。可以通过Lua脚本实现复杂请求
  • -H 指定请求的 HTTP Header
  • --latency 压测结束后,打印响应时间统计消息
  • --timeout 请求超时时间
  • -v 版本信息

wrk使用示例

使用wrk的前置条件

在压测之前,先确保linux的最大文件句柄数是否足够,可以通过

ulimit -a 

查看当前用户的文件句柄限制 ,如果不够则会报

"too many open files" 

可以通过修改
/etc/security/limits.conf 文件内容,修改内容可以形如下

root soft nproc 65535
root hard nproc 65535
root soft nofile 65535
root hard nofile 65535

此时再通过 ulimit -a 查看一下,如果没生效,可以在/etc/security/limits.d/这个目录进行修改。查了一下资料在Centos7系统中,使用Systemd替代了之前的SysV。/etc/security/limits.conf文件的配置作用域缩小了。/etc/security/limits.conf的配置,只适用于通过PAM认证登录用户的资源限制,它对systemd的service的资源限制不生效。
因此我们可以在/etc/security/limits.d/新建一个文件比如nofile.conf,填入

root soft nproc 65535
root hard nproc 65535
root soft nofile 65535
root hard nofile 65535

然后执行重启命令

示例

wrk -t32 -c5000 -d60s --timeout 30s --latency https://www.baidu.com/

这个命令的意思是用32个线程模拟5000个并发,对百度这个网站进行持续60s的压测,请求超时时间为30s

压测结果解读

Running 1m test @ https://www.baidu.com/
  32 threads and 5000 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     6.59s     5.02s   29.57s    79.01%
    Req/Sec     5.14      4.82    36.00     83.11%
  Latency Distribution
     50%    4.91s 
     75%    8.24s 
     90%   13.38s 
     99%   25.42s 
  4677 requests in 1.00m, 51.98MB read
  Socket errors: connect 40, read 0, write 0, timeout 27
Requests/sec:     77.82
Transfer/sec:      0.86MB

a、 Thread Stats 线程统计,包括响应时间以及请求时间

  • Latency:响应时间,有平均值、标准偏差、最大值、正负一个标准差占比。
  • Req/Sec:每个线程每秒完成的请求数, 同样有平均值、标准偏差、最大值、正负一个标准差占比。

b、 Latency Distribution 响应时间分布

  • 50%:50% 的响应时间为4.91s。
  • 75%:75% 的响应时间为8.24s 。
  • 90%:90% 的响应时间为13.38s
  • 99%:99% 的响应时间为25.42s。

c、 4677 requests in 1.00m, 51.98MB read

1m 完成的总请求数(4677)和数据读取量(51.98MB)

d、 Socket errors: connect 40, read 0, write 0, timeout 27

错误统计,会统计 connect 连接失败请求个数(40个)、读失败请求个数、写失败请求个数、超时请求个数(27个)。

e、 Requests/sec: 77.82

每秒请求数为77.82(QPS)

f、 Transfer/sec: 0.86MB

平均每秒读取0.86MB数据(TPS)

总结

本文是wrk的一个入门介绍,wrk本身具有轻量、安装简单、学习成本很低,几分钟就可以上手。利用异步的事件驱动框架,通过很少的线程就可以压出很大的并发量等优点,但wrk目前仅支持单机压测 ,不支持多机分布式压力测试,因此wrk适合性能基准测试。其实除了wrk之外,还有ab、jmeter、locust、LoadRunner、go-stress-testing等压测工具可供选择

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

推荐阅读更多精彩内容