slow_cooker长周期负载测试工具
slow_cooker 是一个服务器长周期负载测试工具,与其他大压力测试工具不同的是,slow_cooker 可以在很长一段时间内用可预测的负载和并发级别来测试服务器。而且会定期报告 qps 和延迟。
运行
go build; ./slow_cooker <url> 或 go run main.go <url>
测试
go test ./...
标签表
标签 | 默认值 | 描述 |
---|---|---|
-qps |
1 | 发送到每个请求线程后端的 QPS |
-concurrency |
1 | 要运行指定的 QPS 级别的 goroutine 的数量,总 QPS 测量为qps * concurrency 。 |
-iterations |
0 | 实验的迭代次数。之后优雅退出iterations * interval (默认为 0,表示无限)。 |
-compress |
<unset> |
如果设置此项,则要求压缩响应。 |
-data |
<none> |
在请求中包含指定的正文数据。如果数据以“@“开头,则剩余值将被视为读取正文数据的文件路径,或者如果数据值为“@-”,则将从标准输入读取正文数据。 |
-hashSampleRate |
0.0 |
用于检查请求正文哈希的采样率。[0.0, 1.0] 范围内的区间 |
-hashValue |
<none> |
fnv-1a 哈希值用于检查请求正文 |
-header |
<none> |
为每个请求添加额外的标头。可以多次指定,格式为key: value . |
-host |
<none> |
覆盖每个请求上设置的默认主机 header 值。. |
-interval |
10s | 往标准输出报告信息的频率。 |
-latencyUnit |
ms | 延迟单位 [ms |
-method |
GET | 确定发出请求时使用哪个 HTTP 方法。 |
-metric-addr |
<none> |
为 Prometheus-/metrics 端点提供服务时使用的地址。如果未设置,则不会提供任何指标。格式为 host:port 或 :port。 |
-noLatencySummary |
<unset> |
如果设置此项,则最终不会打印延迟的柱状图 |
-noreuse |
<unset> |
默认自动重连,如果设置此项则不会自动重连 |
-reportLatenciesCSV |
<none> |
文件名写入 CSV 延迟值,CSV 格式为毫秒桶(每个桶中的请求数) |
-timeout |
10s | 请求超时 |
-totalRequests |
<none> |
发送请求后退出 |
-help |
<unset> |
打印所有可用的标志并退出 |
使用 URL 文件
如果<url>
参数以@
开头,则参数将被视为文件路径,以读取要发送请求的 URL 列表(用换行符分隔开)。
如果值为@-
,则将从标准输入中读取 url 列表。
示例 url 文件内容:
http://localhost:4140/foo
http://localhost:4140/bar
http://localhost:4140/baz
从文件中读取 url 列表:
$ slow_cooker -qps 100 @urllist
标准输入读取 url :
$ url_generator | slow_cooker -qps 100 @-
列表文件中的 url 将按顺序处理。
示例用法
$ ./slow_cooker -qps 100 -concurrency 10 http://slow_server
2016-05-16T20:45:05Z 0 7102/0/0 10000 71% 10s 0 [ 12 26 37 91 ] 91
2016-05-16T20:45:16Z 1 7120/0/0 10000 71% 10s 1 [ 11 27 37 53 ] 53
2016-05-16T20:45:26Z 2 7158/0/0 10000 71% 10s 0 [ 11 27 37 74 ] 74
2016-05-16T20:45:36Z 3 7169/0/0 10000 71% 10s 1 [ 11 27 36 52 ] 52
2016-05-16T20:45:46Z 4 7273/0/0 10000 72% 10s 0 [ 11 27 36 58 ] 58
2016-05-16T20:45:56Z 5 7087/0/0 10000 70% 10s 1 [ 11 28 37 61 ] 61
2016-05-16T20:46:07Z 6 7231/0/0 10000 72% 10s 0 [ 11 26 35 71 ] 71
2016-05-16T20:46:17Z 7 7257/0/0 10000 72% 10s 0 [ 11 27 36 57 ] 57
2016-05-16T20:46:27Z 8 7205/0/0 10000 72% 10s 0 [ 11 27 36 64 ] 64
2016-05-16T20:46:37Z 9 7256/0/0 10000 72% 10s 0 [ 11 27 36 62 ] 62
2016-05-16T20:46:47Z 10 7164/0/0 10000 71% 10s 0 [ 11 27 38 74 ] 74
2016-05-16T20:46:58Z 11 7232/0/0 10000 72% 10s 0 [ 11 26 35 63 ] 63
在这个例子中,我们看到服务器太慢而无法跟上我们请求的负载,这种缓慢是通过吞吐量百分比来表示的。
日志格式
在输出中使用垂直对齐来帮助发现异常和发现减速。如果您正在运行很多个小时的测试,建议将报告间隔提高到 60 秒(60s
或1m
)。
$timestamp $good/$bad/$failed $trafficGoal $percentGoal $interval $min [$p50 $p95 $p99 $p999] $max $bhash
bad
表示 500 范围内的状态代码。failed
表示连接失败。
bhash
是正文内容的失败哈希数,大于 0 的值表示存在实际问题。
评论