把共同變慢畫成依賴關係
多個站同時讀取變慢,先找它們共用什麼:採集程式、串列閘道、交換器上行、資料庫、磁碟或排程。共同症狀讓共用資源成為優先調查方向,但不等於已找到原因;同時更新的設定或同批設備韌體也可能造成相似現象。
先定義慢在哪裡。設備回應晚、採集排隊久、資料入庫晚與畫面刷新慢,是四個不同位置。保留請求排隊、送出、收到回應、保存及顯示時間;若只有最後一個時間,無法分辨設備與後端誰在等待。
建立站點對照表,每站列出採集工作、通訊通道、主機、交換器路徑及資料庫。再選一個正常站作對照,確認它是否真的共用同一路徑。有些畫面位置相鄰的站,其實使用不同伺服器,不能用畫面編排推論架構。
本文用一般採集系統解說,Windows效能監視器僅為主機側觀察工具。不同PLC、閘道及驅動的同時連線數與排程規則依手冊;以下時間數據是教學假設,沒有替現場完成壓力測試。
先把一秒分成排隊與服務
案例:四站各需50 ms完成一次通訊,在單一串行通道輪流執行,未含額外等待時一輪至少200 ms。若要求每站每100 ms更新,這個排程已無法按期完成;不是每站各自只用50 ms就代表整體足夠。
再加入一個失聯站,每次等500 ms逾時,並立即重試兩次,該站單次排程最多先占1500 ms等待。若其他站必須排在它後面,它們也會晚,雖然實際回應仍只需50 ms。重試次數指初次以外兩次,避免把總嘗試次數誤算。
把每筆請求分成排隊時間與送出後服務時間。例如進佇列到送出900 ms,送出到收到50 ms,總延遲950 ms。這種證據優先指向排程或前方工作;若排隊10 ms而回應940 ms,檢查方向不同。
上述算式只適用本例串行處理。可並行的乙太網路連線不一定逐筆相加,但仍受設備容量、執行緒與後端限制。先查架構,再算負載;不要把新增執行緒當成每種協定都可用的加速方法。
同步記錄主機與通道的壓力
觀察通道時另記資料年齡,也就是顯示時刻距離來源取得資料的時間。若畫面每秒刷新但持續播放十分鐘前的積欠資料,使用者仍拿不到即時狀態。歷史補送和即時更新需要明確區分,是否丟棄舊請求也須依資料用途決定。
在同一觀察窗記錄採集佇列長度、完成率、逾時數與重試數,再加主機CPU、記憶體、磁碟及網路指標。Windows可用效能監視器保存時間序列,選擇的計數器名稱與實例依系統版本確認,不只截工作管理員的一個瞬間。
CPU總平均低不代表沒有單一執行緒瓶頸;磁碟容量充足也不表示寫入延遲低。把忙碌程序、等待時間與採集延遲對在一起。若採集每秒完成量低於新增量,佇列持續增長,先查服務能力與阻塞,不要只加大記憶體緩衝。
假設每秒新增100筆、只能處理80筆,在負載維持且未丟棄的條件下,每秒累積20筆,五分鐘多6000筆。擴大佇列只能延後滿載,沒有消除差額。恢復後若只能處理100筆每秒,也沒有額外能力追完積欠資料。
時間戳來自不同主機時先確認時鐘誤差。兩台相差兩秒的電腦,無法直接用相減結果判定數十毫秒的網路延遲;可在同一程序使用合適的單調計時量測區段,再用事件識別把跨主機紀錄連起來。
以有限變更驗證共用瓶頸
設定改善目標前先列業務需要:趨勢可能容許數秒延遲,設備動作確認卻有不同的時間要求。不能把報表可接受的慢套用到控制閉環。重要控制應使用經核准的控制架構,本文的主機效能排查不替代控制系統設計。
先在核准範圍降低非必要查詢頻率,或隔離已知失聯站的排程等待,觀察其他站延遲與佇列是否同步下降。保留變更前後的請求量與產品條件;減少負載後恢復是容量線索,不代表原通訊路徑沒有其他問題。
不要一次延長所有逾時。若原問題是失聯站占用共用通道,更長逾時可能讓全部站更慢。也不要把重試無限增加,因為重試本身消耗同一資源。實際退避、排程公平性與資料時效門檻須依應用需求設計。
完成後應看到瓶頸位置及量化證據,例如「送出後回應仍50 ms,前方失聯請求使排隊增加至900 ms」。改善驗收同時看正常站更新間隔、失聯站處理、佇列是否回落及資料是否過時,不能只看警報次數下降。
若問題只在報表開啟時出現,先比較採集回應與入庫時間。兩者正常但畫面慢,優先看查詢與顯示;入庫延遲增加則查共用資料庫鎖定或儲存壓力。不要因為慢出現在HMI畫面,就直接重寫PLC輪詢。
練習與常見問題
交付時把正常負載、尖峰及單站失聯三種條件分別保存結果,包含觀察時間與請求數。只有正常負載測得快,無法證明故障時其他站仍可按要求更新。
練習:新增率每秒120筆,服務能力每秒100筆,持續兩分鐘會積欠多少?在沒有丟棄、重複或其他變動的假設下,答案是2400筆。若新增率降到80、服務維持100,每秒可消化20筆,另需120秒追完;追完以前最新畫面仍可能落後。
失敗時先查比較期間的資料是否同口徑。平均值可能掩蓋短暫尖峰,故障期間未記錄也會讓圖看起來平穩。把缺測、被丟棄及過期資料分開,不將少收資料後的低延遲當改善。
問:全部站慢一定是網路頻寬嗎?答:不是,共用採集執行緒、閘道或資料庫也可能造成等待。
問:CPU百分之百能直接判根因嗎?答:還要確認忙碌程序、時間與延遲關係,CPU高可能是結果。
問:多開連線一定更快嗎?答:不一定,設備連線與處理能力有限,還可能增加競爭。
問:降低輪詢頻率後沒有逾時就完成了嗎?答:仍須確認新更新週期滿足控制與監視需求,以及故障恢復不會再次累積。
參考:Microsoft Learn:Troubleshoot performance problems in Windows,說明保存效能資料並縮小主機瓶頸範圍。