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 是壓力測試。達到系統邊界時應寫“達到壓力邊界”或“不建議持續執行”,不能寫成常規容量通過。
型號報告:
相關說明: