wrk 的开源的, 代码在 github 上. https://github.com/wg/wrk 


wrk 的一个很好的特性就是能用很少的线程压出很大的并发量. 原因是它使用了一些操作系统特定的高性能 io 机制, 比如 select, epoll, kqueue 等. 其实它是复用了 redis 的 ae 异步事件驱动框架. 


mac 安装wrk

brew install wrk

查看使用

直接输入wrk就有相关解释


-c 持续连接数 长链接?

-d 测试的时间

-t 线程数量

-s 指定加载的lua脚本


例子

wrk -t12 -c100 -d30s http://www.baidu.com  

使用12个线程

100个链接

持续30s


一般线程数不宜过多. 核数的2到4倍足够了. 多了反而因为线程切换过多造成效率降低. 因为 wrk 不是使用每个连接一个线程的模型, 而是通过异步网络 io 提升并发量. 所以网络通信不会阻塞线程执行. 这也是 wrk 可以用很少的线程模拟大量网路连接的原因. 而现在很多性能工具并没有采用这种方式, 而是采用提高线程数来实现高并发. 所以并发量一旦设的很高, 测试机自身压力就很大. 测试效果反而下降.


 12 threads and 100 connections

  Thread Stats   Avg      Stdev     Max   +/- Stdev

    Latency   743.24ms  405.11ms   2.00s    68.19%

    Req/Sec    10.61      7.42    59.00     66.96%

  3083 requests in 30.09s, 45.61MB read

Latency: 可以理解为响应时间, 有平均值, 标准偏差, 最大值, 正负一个标准差占比.


Req/Sec: 每个线程每秒钟的完成的请求数, 同样有平均值, 标准偏差, 最大值, 正负一个标准差占比. 


Requests/sec:    102.44

Transfer/sec:      1.52MB

30秒钟总共完成请求数和读取数据量. 


其他请求

关于其他类型的请求需要写lua脚本来跑。暂时没看过lua脚本相关。


作者:lcf枫 

来源:CSDN 

原文:https://blog.csdn.net/u012279631/article/details/80602820 

版权声明:本文为博主原创文章,转载请附上博文链接!