wrk
在一次分享会上同事分享了这个工具。感觉非常小巧,足够开发使用来做基本的性能测试。
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脚本相关。
链接:http://zjumty.iteye.com/blog/2221040
参考链接: