跳转到内容
返回官网

EMS Builder 性能测试手册

手册版本: v1.1
当前统计规则: 计数采样时额外采集首尾 2 次,正式结果只统计中间样本。

测试说明:本测试不接入真实仪表、PLC 或串口网关,统一使用 Modbus TCP 模拟设备。测试结果表示 Edge-EMS Builder 在理想通信条件下的处理能力,不表示真实现场的端到端性能。

测试内容 需要回答的问题
数据采集 EMS Builder 每秒可以稳定处理多少点位?
Trigger Lua 任务能否按计划执行?耗时是否稳定?
MQTT / 协作任务 任务数量是否达标?是否出现延迟或失败?
数据存储 实时存储和变化存储对性能有什么影响?
系统资源 CPU、内存和磁盘是否接近上限?
稳定性 长时间运行是否崩溃、重启或持续积压?
负载 测试内容
数据采集 从 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 告警
指标 计算 每秒
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次

计算方式:

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 小时。

短时性能复测采用固定次数采样,次数以对应批次报告为准。以下以每场景采集 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 次短时数据替代。

以下 5 个服务必须在相同 sample_no 下先求和,再计算统计指标:

cb_core
cb_nginx
cb_backend
ems_backend
ems_postgresql
AEMS_CPU_raw(n) = 同一 sample_no 下 5 个服务 CPU 之和
4核整机CPU(n) = AEMS_CPU_raw(n) ÷ 4
Edge-EMS Builder内存(n) = 同一 sample_no 下 5 个服务内存之和

报告至少给出平均、P95、P99 和峰值。不得把不同时间发生的 5 个服务独立峰值直接相加。

trigger_per_sec 和 mqtt_per_sec 按时间升序排列后,同样剔除首尾秒桶,避免数据库查询区间首尾不足一整秒。

任务秒桶与资源采样次数不一定严格一一对应:某一秒可能没有记录,也可能因任务积压而在下一秒集中完成。报告必须列出有效秒桶数量,并同时给出:

  • 每秒处理量平均值和相对目标的达成率;
  • 每秒平均 SpendTime 的平均、P50、P95、P99;
  • 所有秒桶中的单次最大 SpendTime;
  • 每秒平均 SpendTime 超过 200 ms 的秒数和比例。

如果某一完整秒内没有任务记录,吞吐统计应按 0 处理;该秒没有可计算的时延,不应伪造为 0 ms。后续监控脚本应输出明确的统计窗口开始、结束时间,便于补齐空秒。

类别 需要统计
数据采集 配置点数、成功点数、失败和丢弃
Trigger 目标次数、实际次数、平均耗时、P50、P95、P99、最大值
MQTT / 协作 目标次数、实际次数、耗时、错误
CPU 完整 EMS Builder 的平均、P95 和峰值
内存 完整 EMS Builder 的平均、峰值和变化趋势
磁盘 读写速率、I/O 等待、数据库写入状态
Modbus 每个 Slave 的读写数量、失败、超时和重试
稳定性 崩溃、OOM、异常重启、持续积压

关键计算:

正确率 = 成功数 ÷(成功数 + 失败数 + 超时数 + 丢弃数)
达成率 = 实际每秒平均处理量 ÷ 场景目标

SpendTime 表示任务的实际执行耗时。报告不能只展示平均值,还必须展示 P95、P99 和最大值,以识别偶发的长时间延迟。

项目合同或验收规范优先;没有单独约定时使用以下参考值。

项目 推荐标准
处理量 平均达成率 ≥ 99%
Trigger / MQTT 耗时 P95 < 200 ms
CPU 4 核设备平均占用 < 80%,无持续满载
内存 整机平均占用 < 70%,无持续增长
正确率 ≥ 99.99%,无未解释丢弃
稳定性 连续 72 小时无崩溃、OOM 和异常重启
恢复能力 压力降低后 5 分钟内恢复稳定
情况 处理
测试时间不足 标记“未完成”
20 个 Slave 未全部参与 重新测试
写入集中在少数 Slave 调整分配后重测
压力源或网络成为瓶颈 排除问题后重测
成功、失败、超时数据缺失 标记“数据不完整”
S6 未运行 72 小时 不得写“稳定性通过”

S4、S5 是压力测试。达到系统边界时应写“达到压力边界”或“不建议持续运行”,不能写成常规容量通过。

型号报告:

相关说明: