EMS Builder 在 AFE-E630 上的性能测试报告
报告版本: v1.3
测试日期: 2026-07-29
报告日期: 2026-07-30
统计口径: 每场景采集 2,002 次,忽略首尾样本,仅统计sample_no=2~2001的 2,000 次有效资源样本
关联手册: Edge-EMS Builder 性能测试手册
一、性能结果概览
Section titled “一、性能结果概览”数据采集配置量
聚合运算
Trigger 目标
MQTT 任务目标
协作任务
最迟 10 秒保存
整机 CPU 平均 / P95
整机内存平均 / P95
Trigger P95
MQTT P95
每次 Trigger 执行代表 1 次设备控制、1 次本地告警与 MQTT 告警,以及 1 次聚合数据写入。Edge-EMS Builder 会根据设备内存为 PostgreSQL 分配资源,因此不同设备、数据库规模及缓存状态下的内存占用可能存在明显差异。
1.1 醒目结论
Section titled “1.1 醒目结论”推荐 AFE-E630 按 S3.5 场景运行:5,000 点/秒、30 个聚合运算、90 次 Trigger/秒、20 次 MQTT/秒、10 次协作任务/秒,并启用 10 秒变化存储。
S3.5 实测 Trigger 为 89.97 次/秒、MQTT 为 19.98 次/秒;Trigger / MQTT P95 分别为 56 ms 和 77 ms。整机 CPU P95 为 71.09%,整机实际内存 P95 为 41.41%,且本场景没有出现采样超时。
面向长期生产运行,建议在 S3.5 已测负载上保留约 20% 工程余量,初始容量可按不高于约 4,000 点/秒、72 次 Trigger/秒、16 次 MQTT/秒、8 次协作任务/秒规划。该建议是由实测配置折算的工程值,并非单独执行过的测试场景;正式上线前仍应使用项目实际脚本、消息大小和数据库历史量复测。
1.2 各场景状态
Section titled “1.2 各场景状态”| 图标 | 场景 | 结论 |
|---|---|---|
| 🟢 | S1 | 基准场景通过,资源和任务时延均有充足余量。 |
| 🟢 | S2 | 通过,实时存储下 2,000 点/秒运行平稳;出现 1 次采样超时。 |
| 🟢 | S2.5 | 通过,变化存储相较 S2 明显降低 CPU 压力,且没有采样超时。 |
| 🟡 | S3 | 任务指标通过,但整机 CPU P95 为 81.06%,接近持续运行边界,并出现 2 次采样超时。 |
| 🟢 | S3.5 | 综合表现最佳,作为 AFE-E630 当前推荐场景。 |
| 🔴 | S6 | 仅适合作为短时压力预检;整机 CPU P95 为 94.02%,MQTT 处理量低于 99% 推荐线,并出现 11 次采样超时。 |
二、结论摘要
Section titled “二、结论摘要”- 本轮共测试 S1、S2、S2.5、S3、S3.5、S6 六个场景,其他场景不纳入数据表、比较和结论。
- S3.5 在 5,000 点/秒配置负载下,Trigger 达成率为 99.97%,MQTT 达成率为 99.90%;Trigger / MQTT P95 分别为 56 ms 和 77 ms。
- S3 与 S3.5 的业务负载相同。启用变化存储后,S3.5 的整机 CPU 平均值由 57.95% 降至 50.16%,P95 由 81.06% 降至 71.09%,更适合持续运行。
- S6 的 Trigger 达成率为 99.49%,但 MQTT 达成率为 98.73%;整机 CPU P95 为 94.02%,峰值达到 100%,不建议作为持续生产配置。
- 所有场景的 Trigger 总体 P99 均低于 200 ms,但仍出现约 10~12 秒的单次长尾。S6 的 MQTT P99 为 236.62 ms,已超过 200 ms。
- 本轮每个场景仅保留 2,000 秒(约 33 分 20 秒)有效样本,适合性能对比,但不能替代 72 小时稳定性测试。
三、统计口径
Section titled “三、统计口径”3.1 样本筛选
Section titled “3.1 样本筛选”监控采用次数计数。每个场景的资源原始数据均包含 sample_no=1~2002:
忽略:sample_no = 1统计:sample_no = 2~2001,共 2,000 次忽略:sample_no = 2002剔除首尾样本可避免开始和结束时不足完整一秒的数据进入统计。Trigger 与 MQTT 总体结果均以 2,000 秒为分母;即使某一秒没有任务记录,该秒仍计入平均处理量,避免只统计有数据秒而高估吞吐。
3.2 EMS Builder 整体范围
Section titled “3.2 EMS Builder 整体范围”以下 5 个服务合并视为一个完整 Edge-EMS Builder:
| 服务 | 作用 |
|---|---|
cb_core |
数据采集与核心通信 |
cb_nginx |
CommBridge Web / 反向代理 |
cb_backend |
CommBridge 后端 |
ems_backend |
EMS Builder 计算、策略与业务逻辑 |
ems_postgresql |
EMS Builder 数据存储 |
每个 sample_no 先合计 5 个服务,再从 2,000 个合计值计算平均、P95、P99 和峰值,不将各服务在不同时刻出现的独立峰值直接相加。
3.3 CPU、内存与任务时延
Section titled “3.3 CPU、内存与任务时延”- 五服务 CPU 原始值采用单核等效百分比;AFE-E630 为 4 核设备,因此“Edge-EMS Builder 4 核等效 CPU”= 五服务 CPU 合计 ÷ 4。
- “整机 CPU”使用工作簿中的
_system_total,表示全部 CPU 容量归一化后的 0~100% 占用,是判断设备容量的主要指标。 - “Edge-EMS Builder 归属内存”是五个服务 cgroup 归属内存的合计;共享页和缓存可能被重复归属,因此该值可高于整机实际已用内存,不能直接除以物理内存作为容量占用率。
- “整机实际内存”按
MemTotal - MemAvailable计算,是判断物理内存余量的主要指标。 - Trigger / MQTT 的平均值和 P50、P95、P99 基于有效区间内的全部任务记录,不是每秒平均值的分位数。
- 各工作簿均通过“汇总前测试负载已关闭”校验,Trigger、MQTT 与 CommBridge 均在汇总前关闭并等待 30 秒。
四、测试对象与环境
Section titled “四、测试对象与环境”| 项目 | 配置 |
|---|---|
| 设备型号 | AFE-E630 |
| CPU | Arm Cortex-A55,4 核 |
| 内存 | 3.81 GB DDR4 |
| 操作系统 | JelinaOS,基于 Debian 11 |
| 存储 | eMMC |
| 软件版本 | CommBridge-rc-2026-07-08T17-52-07;EMS Builder v1.2;PostgreSQL v18.3 |
| 网络 | 局域网;MQTT / TCP |
| 监控采样 | 每秒采集 1 次;每场景 2,002 次,统计中间 2,000 次 |
| 测试数据源 | perf_S1_20260729_171807.xlsx、perf_S2_20260729_175426.xlsx、perf_S2.5_20260729_183152.xlsx、perf_S3_20260729_190918.xlsx、perf_S3.5_20260729_194703.xlsx、perf_S6_20260729_202445.xlsx |
五、场景与负载
Section titled “五、场景与负载”| 场景 | 数据采集 | 聚合运算 | 普通 Trigger | 100 ms Trigger | Trigger 目标 | MQTT 目标 | 协作任务 | 存储策略 |
|---|---|---|---|---|---|---|---|---|
| S1 | 500 点/秒 | 10 | 10 次/秒 | 0 | 10 次/秒 | 5 次/秒 | 0 次/秒 | 实时 |
| S2 | 2,000 点/秒 | 20 | 20 次/秒 | 2 | 40 次/秒 | 10 次/秒 | 2 次/秒 | 实时 |
| S2.5 | 2,000 点/秒 | 20 | 20 次/秒 | 2 | 40 次/秒 | 10 次/秒 | 2 次/秒 | 变化存储(10 秒) |
| S3 | 5,000 点/秒 | 30 | 50 次/秒 | 4 | 90 次/秒 | 20 次/秒 | 10 次/秒 | 实时 |
| S3.5 | 5,000 点/秒 | 30 | 50 次/秒 | 4 | 90 次/秒 | 20 次/秒 | 10 次/秒 | 变化存储(10 秒) |
| S6 | 5,000 点/秒 | 20 | 50 次/秒 | 10 | 150 次/秒 | 30 次/秒 | 15 次/秒 | 实时 |
“数据采集”是场景配置负载。当前工作簿未提供逐点采集成功数,不能将配置值表述为已经独立验证的成功入库吞吐量。
六、测试时间
Section titled “六、测试时间”| 场景 | 有效统计区间 | 有效时长 |
|---|---|---|
| S1 | 2026-07-29 17:18:09 ~ 17:51:29 | 2,000 秒 |
| S2 | 2026-07-29 17:54:29 ~ 18:27:49 | 2,000 秒 |
| S2.5 | 2026-07-29 18:31:54 ~ 19:05:14 | 2,000 秒 |
| S3 | 2026-07-29 19:09:20 ~ 19:42:40 | 2,000 秒 |
| S3.5 | 2026-07-29 19:47:06 ~ 20:20:26 | 2,000 秒 |
| S6 | 2026-07-29 20:24:47 ~ 20:58:07 | 2,000 秒 |
以上时间均为 UTC+8。
七、CPU 结果
Section titled “七、CPU 结果”7.1 EMS Builder 五服务合计(4 核等效)
Section titled “7.1 EMS Builder 五服务合计(4 核等效)”| 状态 | 场景 | 平均 | P95 | P99 | 峰值 |
|---|---|---|---|---|---|
| 🟢 | S1 | 13.48% | 23.97% | 41.50% | 62.53% |
| 🟢 | S2 | 28.47% | 48.33% | 56.36% | 67.17% |
| 🟢 | S2.5 | 26.11% | 38.36% | 49.96% | 65.76% |
| 🟡 | S3 | 50.58% | 72.31% | 78.55% | 95.43% |
| 🟢 | S3.5 | 43.50% | 61.27% | 70.93% | 86.75% |
| 🔴 | S6 | 65.95% | 85.87% | 91.61% | 208.59% |
S6 的 Edge-EMS Builder 峰值 208.59% 是单个采样窗口的异常值,对应五服务合计 CPU 时间超过 4 核常规容量。结合该场景 11 次采样超时判断,可能存在采样窗口跨期或突发调度,不将其视为可持续资源占用。
7.2 整机 CPU(全部 CPU 容量归一化)
Section titled “7.2 整机 CPU(全部 CPU 容量归一化)”| 状态 | 场景 | 平均 | P95 | P99 | 峰值 |
|---|---|---|---|---|---|
| 🟢 | S1 | 20.22% | 38.67% | 48.57% | 67.70% |
| 🟢 | S2 | 35.88% | 57.58% | 66.41% | 82.42% |
| 🟢 | S2.5 | 32.72% | 45.28% | 57.03% | 75.06% |
| 🟡 | S3 | 57.95% | 81.06% | 89.16% | 98.64% |
| 🟢 | S3.5 | 50.16% | 71.09% | 79.84% | 96.98% |
| 🔴 | S6 | 73.86% | 94.02% | 97.95% | 100.00% |
整机 CPU 是本报告判断设备 CPU 容量的主要依据。S3.5 的 P95 比 S3 低 9.97 个百分点;S6 的 P95 已超过 90%,不具备足够的持续运行余量。
八、内存结果
Section titled “八、内存结果”| 状态 | 场景 | EMS Builder 归属内存平均 | EMS Builder 归属内存 P95 | 整机实际内存平均 | 整机实际内存 P95 | 整机实际内存峰值 |
|---|---|---|---|---|---|---|
| 🟢 | S1 | 2,666.77 MB | 2,704.44 MB | 1,550.46 MB(39.74%) | 1,637.29 MB(41.97%) | 1,694.09 MB(43.42%) |
| 🟢 | S2 | 2,805.86 MB | 2,895.39 MB | 1,579.23 MB(40.48%) | 1,675.40 MB(42.94%) | 1,736.57 MB(44.51%) |
| 🟢 | S2.5 | 2,881.41 MB | 2,933.45 MB | 1,507.67 MB(38.64%) | 1,596.94 MB(40.93%) | 1,667.61 MB(42.74%) |
| 🟡 | S3 | 3,067.36 MB | 3,119.55 MB | 1,591.41 MB(40.79%) | 1,684.10 MB(43.17%) | 1,759.92 MB(45.11%) |
| 🟢 | S3.5 | 3,059.29 MB | 3,106.37 MB | 1,579.83 MB(40.49%) | 1,615.76 MB(41.41%) | 1,702.34 MB(43.63%) |
| 🔴 | S6 | 3,071.13 MB | 3,123.09 MB | 1,636.22 MB(41.94%) | 1,721.25 MB(44.12%) | 1,791.94 MB(45.93%) |
五服务归属内存包含 cgroup 归属的共享页与缓存,不等于物理内存净占用。整机实际内存更能反映设备剩余容量,因此场景判定使用整机实际内存。不同场景的数据库初始状态和缓存热度会影响结果,不应只根据点位数量推断内存变化。
九、处理量结果
Section titled “九、处理量结果”平均处理量以完整 2,000 秒有效区间为分母;达成率依据任务总数除以目标总数计算,避免工作簿显示值四舍五入造成偏差。
| 状态 | 场景 | Trigger 总数 | Trigger 平均 / 目标 | Trigger 达成率 | MQTT 总数 | MQTT 平均 / 目标 | MQTT 达成率 |
|---|---|---|---|---|---|---|---|
| 🟢 | S1 | 20,000 | 10.00 / 10 | 100.00% | 10,000 | 5.00 / 5 | 100.00% |
| 🟢 | S2 | 79,990 | 40.00 / 40 | 99.99% | 19,995 | 10.00 / 10 | 99.98% |
| 🟢 | S2.5 | 79,990 | 40.00 / 40 | 99.99% | 20,000 | 10.00 / 10 | 100.00% |
| 🟡 | S3 | 179,788 | 89.89 / 90 | 99.88% | 39,800 | 19.90 / 20 | 99.50% |
| 🟢 | S3.5 | 179,943 | 89.97 / 90 | 99.97% | 39,960 | 19.98 / 20 | 99.90% |
| 🔴 | S6 | 298,469 | 149.23 / 150 | 99.49% | 59,239 | 29.62 / 30 | 98.73% |
本报告以 99% 作为推荐运行场景的处理量参考线。S6 的 MQTT 低于该参考线,且高 CPU、时延上升与采样超时同时出现,表明该负载已进入压力区。
十、Trigger 时延
Section titled “十、Trigger 时延”以下分位数基于有效区间内全部 Trigger 任务记录,单位为毫秒。
| 状态 | 场景 | 平均 | P50 | P95 | P99 | 单次最大 |
|---|---|---|---|---|---|---|
| 🟢 | S1 | 47.86 | 19 | 32 | 47 | 10,160 |
| 🟢 | S2 | 23.65 | 11 | 30 | 53 | 10,938 |
| 🟢 | S2.5 | 26.06 | 17 | 46 | 69 | 10,938 |
| 🟡 | S3 | 37.69 | 14 | 55 | 99 | 10,993 |
| 🟢 | S3.5 | 29.88 | 15 | 56 | 88 | 10,994 |
| 🔴 | S6 | 44.06 | 17 | 87 | 162 | 11,985 |
常态分位数均较低,但各场景均存在约 10~12 秒的极端单次长尾。长尾不会明显改变 P99,却可能影响个别控制或告警任务,仍需专项排查。
十一、MQTT 时延
Section titled “十一、MQTT 时延”以下分位数基于有效区间内全部 MQTT 任务记录,单位为毫秒。
| 状态 | 场景 | 平均 | P50 | P95 | P99 | 单次最大 |
|---|---|---|---|---|---|---|
| 🟢 | S1 | 57.90 | 57 | 65 | 73 | 122 |
| 🟢 | S2 | 57.83 | 57 | 67 | 76 | 115 |
| 🟢 | S2.5 | 57.13 | 56 | 65 | 74 | 330 |
| 🟡 | S3 | 62.31 | 58 | 89 | 146 | 340 |
| 🟢 | S3.5 | 58.60 | 57 | 77 | 98 | 220 |
| 🔴 | S6 | 74.79 | 64 | 134 | 236.62 | 920 |
十二、场景判定
Section titled “十二、场景判定”| 场景 | 判定 | 主要依据 |
|---|---|---|
| S1 | 通过 | 基准负载下整机 CPU P95 为 38.67%,内存 P95 为 41.97%,任务处理量达到目标。 |
| S2 | 通过 | Trigger 与 MQTT 达成率均接近 100%,资源保有充足余量;需留意 1 次采样超时。 |
| S2.5 | 通过 | 处理量达到目标;变化存储下整机 CPU 平均值和 P95 均明显低于 S2。 |
| S3 | 有条件通过 | 处理量和任务时延达标,但整机 CPU P95 为 81.06%,出现 2 次采样超时,持续运行余量偏小。 |
| S3.5 | 推荐 | 在 5,000 点/秒负载下,Trigger / MQTT P95 均低于 100 ms,整机 CPU P95 为 71.09%,实际内存 P95 为 41.41%,且无采样超时。 |
| S6 | 不建议持续运行 | MQTT 达成率为 98.73%、P99 为 236.62 ms,整机 CPU P95 为 94.02%,并出现 11 次采样超时。 |
十三、容量与部署建议
Section titled “十三、容量与部署建议”13.1 已验证推荐配置
Section titled “13.1 已验证推荐配置”- 数据采集配置量:5,000 点/秒;
- 聚合运算:30 个;
- 普通 Trigger:50 次/秒;
- 100 ms Trigger:4 个,即 40 次/秒;
- Trigger 合计:90 次/秒;
- MQTT:20 次/秒;
- 协作任务:10 次/秒;
- Trigger 任务记录:保存;
- 数据存储:变化存储,数值不变时最迟 10 秒保存一次。
13.2 生产部署建议
Section titled “13.2 生产部署建议”- 长期运行建议在上述已测配置基础上保留约 20% 工程余量,并使用实际 Lua 脚本、消息体大小和数据库历史量进行上线前复测。
- 建议对整机 CPU 设置 80% 预警,对整机内存设置 70% 预警、80% 严重告警,并持续观察 PostgreSQL 缓存和数据库增长。
- 需要实时存储时可参考 S3 的结果,但该场景整机 CPU P95 已超过 80%;若不是业务强制要求,优先采用 S3.5 的变化存储策略。
- S6 仅用于短时压力、限流或过载保护验证,不建议作为 E630 的持续生产负载。
十四、质量告警与待补充测试
Section titled “十四、质量告警与待补充测试”- S2 出现 1 次采样超时,S3 出现 2 次,S6 出现 11 次;S1、S2.5 和 S3.5 未发现采样超时。
- 完整执行 72 小时稳定性测试,记录进程重启、OOM、错误日志、内存斜率和数据库增长。
- 为采集点、Trigger、MQTT、协作任务分别增加成功、失败、超时和丢弃计数。
- 补充磁盘吞吐、I/O wait、PostgreSQL WAL / checkpoint、连接池和队列深度。
- 对 Trigger 的 10~12 秒单次长尾关联任务 ID、Lua 脚本、SQL、GC、I/O 和系统日志。
- 记录每个场景开始前的数据库大小、PostgreSQL 配置和缓存热度,增强跨场景内存结果的可比性。
十五、数据限制
Section titled “十五、数据限制”- 点位数是测试配置量,不是逐点成功计数;现有数据无法独立证明每个采集点均成功写入。
- 工作簿没有业务错误率、任务结果状态和正确率字段,处理量达标不等于业务正确率为 100%。
- 本轮各场景均为约 33 分 20 秒的短时测试,适合比较性能,不替代长期稳定性测试。
- S3.5 是当前批次综合指标最优的已测配置;20% 工程余量是容量规划建议,不是独立实测结论。
其他型号请参阅:AFE-E620 测试报告。