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 測試報告。