一、wrk简介
wrk 是一种高效的 HTTP 基准测试工具,能够在单个多核 CPU 上运行时产生大量负载。它将多线程设计与 epoll 和 kqueue 等可伸缩事件通知系统相结合,能用很少的线程压出很大的并发量,并且可以支持lua脚本来创建复杂的测试场景(请求参数的定制,参数加密、鉴权请求等)。
二、参数说明
参数选项 | 参数说明 |
---|---|
-c | 总的连接数(每个线程处理的连接数=总连接数/线程数) |
-d | 测试的持续时间,如2s(2second),2m(2minute),2h(hour) |
-t | 使用的线程数总数 |
-s | 加载的lua脚本文件 |
-H | 向请求头添加信息 |
–latency | 显示延迟统计 |
–timeout | Socket/request 超时时间 |
-v | 显示版本详细信息 |
三、压测示例
1、wrk -t12 -c800 -d30s --latency --timeout 5s http://localhost:80/login (wrk使用12个线程,800个连接,测试持续时间30s,显示延迟统计信息,请求超时时间为5s)
加载lua脚本文件:
wrk -t12 -c800 -d30s --latency --timeout 5s -s post.lua http://localhost:80/login
注:
-t (线程数) | 一般是CPU核数,最大不要超过CPUx2核数,否则会带来额外的上下文切换,将线程数设置为CPU核数主要是为了WRK能最大化利用CPU,使结果更准确。 |
---|---|
-c (连接数) | 连接数(connection)可以理解为并发数,一般在测试过程中,这个值需要使用者不断向上调试,直至QPS达到一个临界点,便可认为此时的并发数为系统所能承受的最大并发量。 |
2、压测参数简介:
参数选项 | 参数说明 |
---|---|
Latency | 响应时间 |
Req/Sec | 每个线程每秒钟的执行的连接数 |
Avg | 平均值 |
Max | 最大值 |
Stdev | 标准差 |
+/- Stdev | 正负一个标准差占比 |
Latency Distribution | 响应时间分布 |
Requests/sec | 每秒请求数(也就是QPS),压力测试的性能指标,通过这个参数可以看出吞吐量 |
Transfer/sec | 每秒传输数据量 |
[root@ZYL nginx]# wrk -t4 -c100 -d30s --latency --timeout 3s http://127.0.0.1:80/
Running 30s test @ http://127.0.0.1:80/
4 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 9.97ms 34.84ms 362.77ms 94.41%
Req/Sec 16.50k 9.78k 57.92k 67.88%
Latency Distribution
50% 1.01ms
75% 3.64ms
90% 10.41ms
99% 198.52ms
1898844 requests in 30.09s, 6.97GB read
Requests/sec: 63106.40
Transfer/sec: 237.06MB
4、测试结果详解:
Running 30s test @ http://127.0.0.1:80/
4 threads and 100 connections
线程状态 平均值 标准差 最大值 正负一个标准差占比
Thread Stats Avg Stdev Max +/- Stdev
响应时间:
Latency 9.97ms 34.84ms 362.77ms 94.41%
每个线程每秒完成的请求数:
Req/Sec 16.50k 9.78k 57.92k 67.88%
Latency Distribution 响应时间分布
50% 1.01ms 在1.01ms响应时间内完成了50%的请求
75% 3.64ms 在3.64ms响应时间内完成了75%的请求
90% 10.41ms 在10.41ms响应时间内完成了90%的请求
99% 198.52ms 在198.52ms响应时间内完成了99%的请求
1898844 requests in 30.09s, 6.97GB read 30.09s内处理了1898844个请求,读取6.97GB数据
Requests/sec: 63106.40 每秒请求数(也就是QPS)
Transfer/sec: 237.06MB 每秒读取237.06MB的数据
希望对您有所帮助,么么哒!