wrk

wrk

在一次分享会上同事分享了这个工具。感觉非常小巧,足够开发使用来做基本的性能测试。

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

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

mac 安装wrk

brew install wrk

查看使用

直接输入wrk就有相关解释

wrk_第1张图片

  • -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脚本相关。

链接:http://zjumty.iteye.com/blog/2221040

参考链接:http://zjumty.iteye.com/blog/2221040

你可能感兴趣的:(http)