slow_cooker长周期负载测试工具

联合创作 · 2023-10-01 19:54

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 秒(60s1m)。

$timestamp $good/$bad/$failed $trafficGoal $percentGoal $interval $min [$p50 $p95 $p99 $p999] $max $bhash 

bad表示 500 范围内的状态代码。failed表示连接失败。

bhash是正文内容的失败哈希数,大于 0 的值表示存在实际问题。

浏览 3
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报