eas-benchmark是EAS平台内置的分布式通用压测工具,支持动态加压、实时查看压测秒级监控数据等,并在压测结束后生成汇总的图文报告。您可以通过该工具对使用EAS部署的服务创建压测任务并进行一键压测,从而了解EAS服务的使用性能。本文为您介绍如何创建压测任务并管理压测任务。
前提条件
已部署模型服务,详情请参见 服务部署:控制台 。
快速入门
创建压测任务
通过EASCMD客户端创建压测任务
通过
bench create
命令创建压测任务。压测任务创建成功后,您可以根据返回的URL,查看压测的实时监控数据。命令格式如下所示。
eascmd bench create [bench_desc_json]
其中 bench_desc_json 表示压测任务相关信息的JSON文件,该文件的示例如下。
{
"service": {
"serviceName": "xgb_test"
"data": {
"content": "W1sxLDAsMCwwLDEsMSwwLDEsMCwxLDEsMCwwLDEsMCwxLDAsMSwwLDAsMSwxLDEsMCwxLDEsMCwwLDAsMSwxLDEsMCwxLDEsMSwxLDAsMSwxLDEsMCwxLDAsMCwwLDEsMSwwLDAsMCwxLDAsMSwwLDEsMCwwLDEsMCwwLDEsMCwxLDAsMCwxLDAsMCwwLDAsMSwwLDEsMCwxLDAsMCwxLDEsMSwwLDAsMSwwLDAsMCwwLDEsMSwxLDAsMSwxLDAsMCwxLDAsMSwwLDEsMSwxLDEsMCwxLDAsMCwxLDEsMSwxLDAsMCwwLDEsMSwwXV0K"
通过 path 指定多个OSS文件作为压测数据,配置示例如下。如需批量配置多条压测数据,可以直接将多个请求数据打包成zip包,通过 oss://XX.zip 对 path 进行配置。
{
"service": {
"serviceName": "xgb_test"
"data": {
"path": "oss://examplebucket/test1.bin,oss://examplebucket/test2.bin"
该JSON文件内的参数解释,如下表所示。
表项 |
参数 |
是否必选 |
描述 |
service |
serviceName |
是 |
待压测服务的服务名称。 |
data |
content |
否 |
单条压测请求数据,Base64编码的字符串。 如果您需要配置多条请求数据,可通过 path 参数进行指定。关于压测数据如何构造及支持的文件类型,详情请参见 压测数据说明 。 |
path |
否 |
测试数据源的路径,支持配置HTTP路径或OSS路径。可同时指定多条路径,通过半角逗号(,)分隔。同时支持通过.zip的形式,对多个压测文件进行批量打包配置。
说明
保存压测数据的文件按原始格式,不需要进行Base64编码。 |
|
multiLine |
否 |
测试数据是否按行分割,Bool类型,默认为false。如果设置为true, 会将下载的数据逐行解析。 |
|
http |
headers |
否 |
http请求header设置,list类型,比如: ["Authorization:aaa", "Content-Type:text"]。 |
timeout |
否 |
http请求延时(单位ms),默认为20000。 |
|
optional |
mode |
否 |
压测模式,支持以下三种模式:
默认为auto自动模式。关于压测模式的更多详细内容,请参见 压测模式介绍 。 |
duration |
否 |
压测时长(单位秒),默认为600,最大不超过1200。 |
|
agentCount |
否 |
当压测模式选择manual模式时,配置该参数。 压测的客户端实例数量,实例数越多压力越大,默认为1。 |
|
concurrency |
否 |
当压测模式选择manual模式时,配置该参数。 压测的每个客户端实例的并发数,并发越高压力越大,默认为2。当压力不够时先增加并发,如果增加并发无法提升压力时再尝试增加客户端实例数。 |
|
adjustInterval |
否 |
当压测模式选择scan模式时,配置该参数。 自动加压的动态调整间隔(单位为s),默认为60。 |
|
minQPS |
否 |
当压测模式选择scan模式时,配置该参数。 自动加压的起始QPS值,默认为100。 |
|
maxQPS |
否 |
当压测模式选择scan模式或auto模式时,配置该参数。 允许到达的QPS上限值。 |
|
maxRT |
否 |
当压测模式选择scan模式或auto模式时,配置该参数。 允许达到的RT(TP99)上限值,超过该阈值会自动调节QPS,直到实时RT符合预期。 |
|
qpsGrowthDelta |
否 |
当压测模式选择scan模式时,配置该参数。 QPS每次增长的数值,默认为50。 |
|
faultTolerate |
否 |
当压测模式选择scan模式或auto模式时,配置该参数。 对请求错误(非200状态码)的容忍程度。比如0.01,表示有1%的请求出现错误则触发错误处理流程。默认值为0.001,即对错误请求的容忍程度为千分之一。 |
|
faultAction |
否 |
当压测模式选择scan模式或auto模式时,配置该参数。 在请求错误率超过 faultTolerate 设定的阈值时,压测控制器的行为,支持以下取值:
默认为revise。 |
使用示例(假设描述压测任务相关信息的JSON文件为bench_xgb.json)
$ eascmd bench create bench_xgb.json
系统输出如下类似结果。
[RequestId]: DE240637-4976-59AF-A28C-BAA55C0A****
[OK] Task [benchmark-xgb-test-b514] is creating
[OK] [Agnet: 0/1]: Succeed to start benchmark master
[OK] [Agnet: 0/1]: Succeed to start benchmark master
[OK] [Agnet: 1/1]: Benchmark task is Running
[OK] Benchmark task is Running
[OK] Click the link http://127.0.0.1:18222/eas-benchmark/statsview to observe realtime visualization details, you can turn it off with CTRL+C.
Turning off will not interrupt the benchmark test task, and you can reopen it by the visualize command:
eascmd -c [config_file] bench visualize benchmark-xgb-test-b514
通过控制台创建压测任务
控制台创建的压测任务为auto(自动加压)模式,具体操作步骤如下。
-
进入 PAI-EAS 模型在线服务 页面。
-
登录 PAI控制台 。
-
在左侧导航栏单击 工作空间列表 ,在工作空间列表页面中单击待操作的工作空间名称,进入对应工作空间内。
-
在工作空间页面的左侧导航栏选择 ,进入 PAI-EAS 模型在线服务 页面。
-
-
按照下图操作指引,创建压测任务。
-
在 添加压测任务 页面,配置以下参数,并单击 创建 。
参数
描述
所属服务
选择需要创建压测任务的服务名称。
压测数据
支持按照 单个数据 、 数据地址 、 OSS文件 和 本地上传 等方式配置压测数据。关于压测数据如何构造及支持的文件类型,详情请参见 压测数据说明 。
说明其中 数据地址 和 OSS文件 支持同时配置多个文件地址,以半角逗号(,)分隔。
文件内的数据是否需要按行分隔
当 压测数据 选择 数据地址 、 OSS文件 或 本地上传 时,支持配置该参数。
打开开关,表示上传的压测数据文件按行做分隔处理,以每行内容作为压测数据进行压测;否则以整个文件内容作为压测数据进行压测。
压测时长(秒)
默认为300秒。
压测QPS上限
允许到达的QPS(即每秒发送请求的速率)上限值,默认为10000。
压测RT上限 (ms)
允许达到的RT(即请求发出后系统响应时间)上限值,单位为毫秒。超过该阈值会自动调节QPS,直到实时RT符合预期。
管理压测任务
通过EASCMD客户端管理压测任务
-
查看压测任务列表
使用
bench list
命令查看当前用户创建的压测任务列表。命令格式如下所示。eascmd bench ls
使用示例
$ eascmd bench ls
系统输出如下类似结果。
[RequestId]: 7F953F8E-8897-5785-808A-CA64830215F6 +-------------------------+--------------------------+-------------+----------------+---------+---------------------+ | TASKNAME | TASKID | REGION | AVAILABLEAGENT | STATUS | CREATETIME | +-------------------------+--------------------------+-------------+----------------+---------+---------------------+ | benchmark-xgb-test-7846 | eas-b-ql470xog6qeh251fdb | cn-shanghai | 0 | Stopped | 2022-06-17 17:58:01 | | benchmark-xgb-test-b514 | eas-b-bdnzvwq0z0h3xqfk0s | cn-shanghai | 2 | Running | 2022-06-20 12:18:54 | +-------------------------+--------------------------+-------------+----------------+---------+---------------------+
-
查看压测任务详情
使用
bench desc
命令查看指定压测任务的详细信息。命令格式如下所示。eascmd bench desc [benchmark_task_name]
其中 benchmark_task_name 表示压测任务名称。使用示例。
$ eascmd bench desc benchmark-demo-test-c7eb
系统输出如下类似结果。
+----------------+------------------------------------------------------------------------------+ | TaskName | benchmark-xgb-test-b514 | | TaskId | eas-b-bdnzvwq0z0h3xq**** | | ServiceName | xgb_test | | Region | cn-shanghai | | DesiredAgent | 2 | | AvailableAgent | 2 | | Status | Running | | Message | Benchmark task is running | | CreateTime | 2021-10-20 12:38:35 | | UpdateTime | 2021-10-20 12:38:45 | | Config | { | | | "base": { | | | "agentCount": 2, | | | "concurrency": 40, | | | "duration": 1200, | | | "requestCount": | | | 922337203685477****, | | | }, | | | ... | | | } | +----------------+------------------------------------------------------------------------------+
-
启动压测任务实时可视化
使用
bench visualize
命令启动压测任务的实时可视化功能。该命令执行完成后会在本地127.0.0.1启动一个由webserver提供的实时监控页面的展示。命令格式如下所示。eascmd bench visualize [benchmark_task_name]
使用示例。
$ eascmd bench visualize benchmark-xgb-test-b514
系统输出如下类似结果。
[OK] Click the link http://127.0.0.1:18734/eas-benchmark/statsview to observe realtime visualization details, you can turn it off with CTRL+C. Turning off will not interrupt the benchmark test task, and you can reopen it by the visualize command: eascmd -c [config_file] bench visualize benchmark-xgb-test-b514
使用浏览器打开链接
http://127.0.0.1:18734/eas-benchmark/statsview
,即可查看实时数据结果。 -
获取压测报告
当压测任务状态为Stopped状态时,表示压测任务结束。压测报告会保存到OSS中,您可以使用
bench report
命令获取压测任务报告。命令格式如下所示。eascmd bench report [benchmark_task_name]
使用示例。
$ eascmd bench report benchmark-demo-test-c7eb
系统输出如下类似结果。
[OK] Benchmark task benchmark-demo-test-c7eb report url: http://eas-benchmark.oss-cn-chengdu.aliyuncs.com/summary/benchmark-demo-test-c7eb-10004.html
使用浏览器打开 url 后的链接,即可查看压测报告结果,具体如下图所示。
-
动态修改客户端实例数量和并发数
当压测模式为manual时,需要使用
bench update
命令动态修改客户端实例数量和并发数。命令格式如下所示。eascmd bench update [benchmark_task_name] -Doptional.concurrency=<attr_value> -Doptional.agentCount=<attr_value>
其中 <attr_value> 为具体取值。使用示例。
$ eascmd bench update benchmark-demo-b99c -Doptional.concurrency=2 -Doptional.agentCount=1
系统输出如下类似结果。
[RequestId]: 9920C672-4D41-5CC4-8EC0-C690F76EB2BA [OK] Running [TaskName: benchmark-demo-b99c, DesiredAgent:1, AvailableAgent: 1, Message: Benchmark task is Updating] [OK] Benchmark task benchmark-demo-b99c was updated successfully
-
停止压测任务
使用
bench stop
命令停止当前正在运行的压测任务。命令格式如下所示。eascmd bench stop [benchmark_task_name]
使用示例。
$ eascmd bench stop benchmark-xgb-test-b514
系统输出如下类似结果。
Are you sure to stop the benchmark task [benchmark-xgb-test-b514] in [cn-shanghai]? [Y/n] [OK] Task [benchmark-xgb-test-b514] is stopping [OK] [Agnet: 0/1]: Benchmark task is Running [OK] [Agnet: 0/1]: Benchmark task is Stopped [OK] Benchmark task is stopped
如果停止任务时,正在运行实时可视化功能。系统会在执行可视化命令的终端输出压测报告,您也可以通过
bench report
命令,获取更详细的html图文报告。 -
启动压测任务
使用
bench start
命令启动处于停止状态的压测任务。命令格式如下所示。eascmd bench start [benchmark_task_name]
说明该命令与
bench create
命令的区别为,通过该命令重新启动压测任务后,会按照该任务最后一次更新的配置,重新启动新一轮的压测任务。使用示例。
$ eascmd bench start benchmark-xgb-test-b514
系统输出如下类似结果。
Are you sure to start the benchmark task [benchmark-xgb-test-b514] in [cn-shanghai]? [Y/n] [OK] Task [benchmark-xgb-test-b514] is starting [OK] [Agnet: 0/1]: Succeed to start benchmark master [OK] [Agnet: 1/1]: Benchmark task is Running [OK] Benchmark task is Running [OK] Click the link http://127.0.0.1:18947/eas-benchmark/statsview to observe realtime visualization details, you can turn it off with CTRL+C. Turning off will not interrupt the benchmark test task, and you can reopen it by the visualize command: eascmd -c [config_file] bench visualize benchmark-xgb-test-b514
-
删除压测任务
压测任务运行结束后,控制器会根据压测任务结束的状态保留压测任务的记录,具体保留规则如下表所示。
结束状态
保留时间
Stopped
48小时。
CreateFailed 、 UpdateFailed 、 Terminated 或 Error
10分钟。
超过保留时间,系统会自动删除压测任务。
您也可以使用
bench delete
命令,手动删除压测任务。命令格式如下所示。eascmd bench delete [benchmark_task_name]
使用示例。
$ eascmd bench delete benchmark-xgb-test-b514
系统输出如下类似结果。
Are you sure to delete the benchmark task [benchmark-xgb-test-b514] in [cn-shanghai]? [Y/n] [OK] Benchmark task benchmark-xgb-test-b514 is Deleting [OK] Benchmark task was deleted successfully
通过控制台管理压测任务
您可以在 一键压测 页签,查看已创建的压测任务列表,并管理压测任务。
-
支持一键启动、停止或删除压测任务。
-
您需要单击右上角的刷新按钮,来刷新压测任务状态。
-
当任务 状态 为 Running 时,您可以单击 操作 列下的 查看 ,来查看任务的实时监控数据。
-
当压测任务自动结束或手动停止压测任务后,即任务 状态 为 Stopped 时,您可以单击 操作 列下的 查看 ,来查看压测报告。
压测数据说明
压测数据格式说明
服务的请求数据格式与模型的定义及Processor的实现有关。
-
如果服务的请求数据为非结构化数据,例如语音、图片、文字等,则直接通过文件上传作为压测请求数据。
-
如果服务的请求数据为结构化数据,例如请求必须为TFRequest,则需要通过EAS SDK来构造请求数据。您可以参考 模型服务预热 ,将生成的二进制数据通过文件上传作为压测请求数据。
压测数据文件类型
压测数据文件类型无特殊要求,与服务的业务类型有关,例如.txt、.jpg、.bin等格式均支持。
压测模式介绍
eas-benchmark支持auto、scan、manual三种压测模式,您可以在配置文件 optional 部分,添加 mode 参数,指定压测模式。
-
auto模式
自动加压模式。eas-benchmark控制器会自动创建用于压测的Agent Worker,并设置合适的并发,通过自动寻优的算法来寻找服务的承压上限。该模式中,您只需在配置文件中指定服务名字和压测数据即可,其它参数均可使用默认值。具体配置示例,如下所示。
{ "service": { "serviceName": "demo" "data": { "path": "https://test-data.oss-cn-chengdu.aliyuncs.com/data/warmup.tf.bin" "optional" { "maxQPS": 1000, "duration": 300 }
-
scan模式
周期加压模式。根据您指定的起始QPS(minQPS),QPS上限(maxQPS),QPS增长时间间隔(adjustInterval),QPS增长步长(qpsGrowthDelta)等参数,动态加压,当服务承载到达指定的maxRT、maxQPS或服务压测出现错误数量超出容忍程度(faultTolerate)时为止。具体配置示例,如下所示。
{ "service": { "serviceName": "demo" "data": { "content": "aGVsbG8K" "optional": { "mode": "scan", "maxQPS": 1000, "minQPS": 500, "qpsGrowthDelta": 100, "adjustInterval": 30 }
-
manual模式
手动加压模式。固定压测Agent数量及每个Agent的并发数,您可以在压测过程中动态调整Agent数量及Agent并发数。具体配置示例,如下所示。
{ "service": { "serviceName": "demo" "data": { "content": "aGVsbG8K" "optional": { "mode": "manual", "agentCount": 1, "concurrency": 5