EMS Builder 性能测试手册
手册版本: v1.1
当前统计规则: 计数采样时额外采集首尾 2 次,正式结果只统计中间样本。
测试说明:本测试不接入真实仪表、PLC 或串口网关,统一使用 Modbus TCP 模拟设备。测试结果表示 Edge-EMS Builder 在理想通信条件下的处理能力,不表示真实现场的端到端性能。
一、测试内容
Section titled “一、测试内容”| 测试内容 | 需要回答的问题 |
|---|---|
| 数据采集 | EMS Builder 每秒可以稳定处理多少点位? |
| Trigger | Lua 任务能否按计划执行?耗时是否稳定? |
| MQTT / 协作任务 | 任务数量是否达标?是否出现延迟或失败? |
| 数据存储 | 实时存储和变化存储对性能有什么影响? |
| 系统资源 | CPU、内存和磁盘是否接近上限? |
| 稳定性 | 长时间运行是否崩溃、重启或持续积压? |
二、测试负载
Section titled “二、测试负载”2.1 EMS Builder 同时执行的工作
Section titled “2.1 EMS Builder 同时执行的工作”| 负载 | 测试内容 |
|---|---|
| 数据采集 | 从 20 个模拟 Slave 读取点位 |
| 聚合运算 | 使用 Lua 对采集数据进行计算 |
| Trigger | 定时执行 Lua 脚本并产生写入、告警和 MQTT 动作 |
| MQTT 任务 | 定时生成并发布 MQTT 消息 |
| 协作任务 | 执行设备间共享与协作处理 |
| 数据存储 | 保存采集数据、计算结果和任务记录 |
2.2 Trigger 中每次 Lua 脚本执行什么?
Section titled “2.2 Trigger 中每次 Lua 脚本执行什么?”| 内容 | 每次执行量 | 作用 |
|---|---|---|
| 基础计算循环 | 100 次 | 执行数学计算、条件判断、循环、字符串和表操作 |
| 原始点写入 | 2 次 | 分别写入测试点 小数据0 和 小数据1 |
| 聚合点写入 | 1 次 | 写入测试聚合点 Agg |
| 本地告警 | 2 次 | 生成两条一级告警 |
| MQTT 告警 | 1 次 | 生成一条二级 MQTT 告警 |
2.3 每秒形成的实际负载
Section titled “2.3 每秒形成的实际负载”| 指标 | 计算 | 每秒 |
|---|---|---|
| Lua 脚本执行 | Trigger任务:50个1s + 5个100ms = 100/s,Mqtt任务:50/s,聚合运算:50/s,共享任务:10/s |
210 次 |
| Trigger基础计算循环 | 100 × 100 |
10,000 次 |
| Trigger原始点写入 | 100 × 2 |
200 次 |
| Trigger聚合点写入 | 100 × 1 |
100 次 |
| Trigger本地告警 | 100 × 2 |
200 次 |
| Trigger MQTT告警 | 100 × 1 |
100 次 |
| Trigger全部写入动作 | 100 × 6 |
600 次 |
| MQTT消息发布 | 50 × 1 |
50次 |
| 数据变化触发聚合运算 | 50 × 1 |
50次 |
| 数据共享任务 | 10 × 1 |
10次 |
三、标准场景
Section titled “三、标准场景”计算方式:
Trigger 次数/秒 = 1s Trigger 数量 + 100ms Trigger 数量 × 10| 场景 | 采集点/秒 | 聚合 | 1s Trigger | 100ms Trigger | Trigger/秒 | MQTT/秒 | 协作/秒 | 存储 | 时长 |
|---|---|---|---|---|---|---|---|---|---|
| S1 | 500 | 10 | 10 | 0 | 10 | 5 | 0 | 实时 | 30 分钟 |
| S2 | 2,000 | 20 | 20 | 2 | 40 | 10 | 2 | 实时 | 30 分钟 |
| S2.5 | 2,000 | 20 | 20 | 2 | 40 | 10 | 2 | 变化 | 30 分钟 |
| S3 | 5,000 | 30 | 50 | 4 | 90 | 20 | 10 | 实时 | 30 分钟 |
| S3.5 | 5,000 | 30 | 50 | 4 | 90 | 20 | 10 | 变化 | 30 分钟 |
| S4 | 10,000 | 30 | 100 | 10 | 200 | 40 | 20 | 变化 | 30 分钟 |
| S5 | 20,000 | 40 | 200 | 10 | 300 | 60 | 40 | 变化 | 30 分钟 |
| S6 | 5,000 | 20 | 50 | 10 | 150 | 30 | 15 | 实时 | 72 小时 |
| 存储方式 | 说明 |
|---|---|
| 实时存储 | 按配置保存每次采集结果 |
| 变化存储 | 数值变化时立即保存;数值不变时每 10 秒至少保存一次 |
S5 用于寻找性能边界;S6 必须实际运行 72 小时。
四、采样与统计规则
Section titled “四、采样与统计规则”4.1 计数采样
Section titled “4.1 计数采样”短时性能复测采用固定次数采样,次数以对应批次报告为准。以下以每场景采集 1,002 次、间隔 1 秒为例;AFE-E630 报告 v1.3 使用 2,002 次采集、2,000 次有效样本:
第 1 次:边界样本,不统计第 2~1001 次:正式样本,共 1,000 次第 1002 次:边界样本,不统计正式报告必须从 raw_data 按 sample_no 筛选,不能直接使用工作簿 summary 工作表中包含首尾样本的全量汇总值。
如果执行完整 30 分钟测试且采样间隔为 1 秒,应采集 1,802 次并统计中间 1,800 次。S6 的 72 小时稳定性测试不能用 1,002 次短时数据替代。
4.2 EMS Builder 整体资源
Section titled “4.2 EMS Builder 整体资源”以下 5 个服务必须在相同 sample_no 下先求和,再计算统计指标:
cb_corecb_nginxcb_backendems_backendems_postgresqlAEMS_CPU_raw(n) = 同一 sample_no 下 5 个服务 CPU 之和4核整机CPU(n) = AEMS_CPU_raw(n) ÷ 4Edge-EMS Builder内存(n) = 同一 sample_no 下 5 个服务内存之和报告至少给出平均、P95、P99 和峰值。不得把不同时间发生的 5 个服务独立峰值直接相加。
4.3 Trigger 与 MQTT
Section titled “4.3 Trigger 与 MQTT”trigger_per_sec 和 mqtt_per_sec 按时间升序排列后,同样剔除首尾秒桶,避免数据库查询区间首尾不足一整秒。
任务秒桶与资源采样次数不一定严格一一对应:某一秒可能没有记录,也可能因任务积压而在下一秒集中完成。报告必须列出有效秒桶数量,并同时给出:
- 每秒处理量平均值和相对目标的达成率;
- 每秒平均
SpendTime的平均、P50、P95、P99; - 所有秒桶中的单次最大
SpendTime; - 每秒平均
SpendTime超过 200 ms 的秒数和比例。
如果某一完整秒内没有任务记录,吞吐统计应按 0 处理;该秒没有可计算的时延,不应伪造为 0 ms。后续监控脚本应输出明确的统计窗口开始、结束时间,便于补齐空秒。
五、观察指标
Section titled “五、观察指标”| 类别 | 需要统计 |
|---|---|
| 数据采集 | 配置点数、成功点数、失败和丢弃 |
| Trigger | 目标次数、实际次数、平均耗时、P50、P95、P99、最大值 |
| MQTT / 协作 | 目标次数、实际次数、耗时、错误 |
| CPU | 完整 EMS Builder 的平均、P95 和峰值 |
| 内存 | 完整 EMS Builder 的平均、峰值和变化趋势 |
| 磁盘 | 读写速率、I/O 等待、数据库写入状态 |
| Modbus | 每个 Slave 的读写数量、失败、超时和重试 |
| 稳定性 | 崩溃、OOM、异常重启、持续积压 |
关键计算:
正确率 = 成功数 ÷(成功数 + 失败数 + 超时数 + 丢弃数)
达成率 = 实际每秒平均处理量 ÷ 场景目标SpendTime 表示任务的实际执行耗时。报告不能只展示平均值,还必须展示 P95、P99 和最大值,以识别偶发的长时间延迟。
六、结果判定
Section titled “六、结果判定”项目合同或验收规范优先;没有单独约定时使用以下参考值。
| 项目 | 推荐标准 |
|---|---|
| 处理量 | 平均达成率 ≥ 99% |
| Trigger / MQTT 耗时 | P95 < 200 ms |
| CPU | 4 核设备平均占用 < 80%,无持续满载 |
| 内存 | 整机平均占用 < 70%,无持续增长 |
| 正确率 | ≥ 99.99%,无未解释丢弃 |
| 稳定性 | 连续 72 小时无崩溃、OOM 和异常重启 |
| 恢复能力 | 压力降低后 5 分钟内恢复稳定 |
6.1 测试无效条件
Section titled “6.1 测试无效条件”| 情况 | 处理 |
|---|---|
| 测试时间不足 | 标记“未完成” |
| 20 个 Slave 未全部参与 | 重新测试 |
| 写入集中在少数 Slave | 调整分配后重测 |
| 压力源或网络成为瓶颈 | 排除问题后重测 |
| 成功、失败、超时数据缺失 | 标记“数据不完整” |
| S6 未运行 72 小时 | 不得写“稳定性通过” |
S4、S5 是压力测试。达到系统边界时应写“达到压力边界”或“不建议持续运行”,不能写成常规容量通过。
型号报告:
相关说明: