wrk

wrk只能运行于 Unix 类的系统上

wrk的GitHub地址:https://github.com/wg/wrk.git 。clone后切换到wrk目录,然后使用make命令

wrk -t8 -c200 -d30s --latency  http://www.bing.com
使用8个线程200个连接,对bing首页进行了30秒的压测,并要求在压测结果中输出响应延迟信息。
Running 30s test @ http://www.bing.com (压测时间30s)

  8 threads and 200 connections (共8个测试线程,200个连接)

  Thread Stats   Avg      Stdev     Max   +/- Stdev
              (平均值) (标准差)(最大值)(正负一个标准差所占比例)
    Latency    46.67ms  215.38ms   1.67s    95.59%
    (延迟)
    Req/Sec     7.91k     1.15k   10.26k    70.77%
    (处理中的请求数)

  Latency Distribution (延迟分布)
     50%    2.93ms
     75%    3.78ms
     90%    4.73ms
     99%    1.35s (99分位的延迟:%99的请求在1.35s以内)
  1790465 requests in 30.01s, 684.08MB read (30.01秒内共处理完成了1790465个请求,读取了684.08MB数据)
Requests/sec:  59658.29 (平均每秒处理完成59658.29个请求)
Transfer/sec:     22.79MB (平均每秒读取数据22.79MB)

模拟测试的时候需要注意,一般线程数不宜过多,核数的2到4倍足够了。 多了反而因为线程切换过多造成效率降低, 因为 wrk 不是一个连接对应一个线程的模型, 而是通过异步网络 I/O 提升并发量。 所以网络通信不会阻塞线程执行,这也是 wrk 可以用很少的线程模拟大量网路连接的原因。

wrk 可以通过写lua脚本发送post请求,从Github上clone下来后在scripts文件夹下有post.lua的脚本实例,同样可以发送json类型的数据,需要把heads中的Content-Type改为application/json。

scripts下的其他lua脚本有验证token、发送动态参数等。wrk执行http请求的时候,调用lua分为3个阶段,setup,running,done,每个wrk线程中都有独立的脚本环境

生成整个request的string,例如:返回
function wrk.format(method, path, headers, body)

超链接的名字
wrk 执行http请求的lua脚本

posted @ 2020-08-31 22:12  shakerChann  阅读(335)  评论(0编辑  收藏  举报