1876 字
9 分鐘

Cloudflare Workers Error 1102 怎麼查?先分 CPU 與記憶體

Cloudflare Workers 出現 Error 1102 時,不要先假設是 CPU 不夠,也不要看到失敗就立刻升級方案。Cloudflare 將這個錯誤定義為 Worker 超過 runtime resource limits,主要要分成 CPU time 和 isolate memory 兩條路徑:前者常見於迴圈、JSON parsing 或 SSR 轉換,後者常見於把大型 body、JSON 或陣列整批留在記憶體。

直接答案是:先在 Workers Logs 保留發生錯誤的 route、部署版本、輸入大小與 resource 資訊,再用小/大輸入和停用昂貴步驟做對照。如果 CPU 跟同步運算一起成長,就做 CPU profile、減少計算或拆出非同步工作;如果記憶體跟 payload 或累積狀態一起成長,就限制輸入、改用串流並避免重複 buffering。只有確認是可接受的 CPU-bound workload,才考慮調整方案的 CPU 設定。

先分清楚 CPU time 和記憶體#

線索CPU time 路徑記憶體路徑
常見程式形狀大型迴圈、重複 JSON parse/stringify、正規表示式、SSR 或文件轉換arrayBuffer()text()、大型 JSON、無上限陣列、buffered response
優先觀察invocation CPU time、route timing、CPU profilebody 大小、物件生命週期、global state、重複請求
第一個修正減少同步工作、快取、分批或移到 Queue/Workflow限制輸入、使用 stream、提早釋放大型資料
方案調整可能提高可用 CPU time,但不能修復無窮迴圈不會替你設計安全的記憶體使用方式

Cloudflare 的 Workers limits 文件目前列出每個 isolate 128 MB 的記憶體限制;CPU limit 則依方案與設定而異。這些是平台條件,不應硬編碼成應用程式的唯一安全邊界;部署前仍要重新查看官方 limits 頁面與目前方案設定。

從回報 1102 的 invocation 開始#

先把同一次失敗的資訊保存下來:

  • request path、HTTP method、部署 version 或 script name;
  • 發生時間、status、輸入大小和是否為特定 tenant/使用者;
  • Workers Logs 顯示的 CPU、exception 或 resource 欄位;
  • 失敗前是否經過 JSON parse、影像/文件轉換、SSR 或多次 subrequest。

接著建立一個最小的輸入矩陣,而不是只重送原本那個 production request:

測試要回答的問題
小 payload正常執行時的 CPU 和記憶體基線是什麼?
接近失敗大小的 payload失敗是否跟輸入大小一起移動?
關閉昂貴轉換哪一段同步程式最可能是 CPU 熱點?
連續多次請求記憶體是否隨 invocation 累積,還是只在單次請求暴增?
相同輸入、不同部署版本問題是否由某次 bundle 或程式變更引入?

Cloudflare 建議用本機 DevTools CPU profile 找 CPU-heavy code,也可用記憶體 profile 觀察配置與保留物件。量測時要把 parsing、transformation、serialization 分開記錄;只量整個 fetch() 的總時間,通常看不出是哪一段超過限制。

CPU 路徑:減少同步工作#

如果 invocation log 顯示 CPU 隨輸入或某個功能一起上升,先檢查程式在網路呼叫前後做了什麼。fetch() 的 network wait 不等於 CPU time;真正會消耗 CPU 的是呼叫前後的迴圈、解析、轉換和序列化。

優先順序可以是:

  1. 避免同一份資料重複 parse、normalize 或 stringify。
  2. 資料形狀允許時,用 indexed lookup 取代每筆都掃完整陣列。
  3. 大型集合拆成有上限的 batch,不要在一個同步迴圈中處理全部資料。
  4. 穩定且可重用的計算結果放入合適的 cache,但先確認失效和一致性策略。
  5. 單一 request 不應承擔長時間工作時,改用 Queue、Workflow 或另一個執行邊界。

如果工作本來就是 CPU-bound,且仍符合單一 request 的產品需求,可以評估 paid plan 的 CPU-time 設定。調高上限後要用同一組輸入重新測試;方案變更不能替無上限迴圈、過大的同步轉換或應該非同步化的工作背書。

記憶體路徑:先抓 buffering#

最容易造成 isolate memory 壓力的程式,通常看起來很直白:把 request body 讀成完整字串或 ArrayBuffer,再建立一份大型 JSON object,最後又同時保留轉換後結果。若輸入大小不受控,這幾份資料可能在同一時間存在。

下面是應用程式層的簡單輸入護欄;10 MiB 只是示例政策,不是 Cloudflare 的平台上限:

const MAX_BYTES = 10 * 1024 * 1024; // application policy, not a platform limit
const contentLength = Number(request.headers.get('content-length') || 0);
if (contentLength > MAX_BYTES) {
return new Response('Payload too large', { status: 413 });
}
// For an unknown content length, enforce the same limit while reading request.body.

Content-Length 不一定存在,也不應被當成唯一防線。未知大小的 body 要在讀取 stream 時累計 bytes,超過應用程式政策就停止;格式允許時使用 ReadableStreamTransformStream,避免同時保存完整輸入和完整輸出。也要檢查 global scope 是否意外保留大型陣列或跨 request 累積的快取。

若 request 在 Worker 執行前就因 edge、zone、API 或 origin 的 request-size limit 被拒絕,那是 413 路徑,不是 1102 記憶體錯誤。相反地,Worker 已被呼叫並在處理資料時超過 runtime resource limit,才應沿著 1102 的 CPU/memory 路徑排查。部署前的 startup 問題則是另一個範圍,可參考 Wrangler check startup 的 bundle 與全域初始化排查

用邊界矩陣驗證修正#

修正後不要只看一次成功 response。至少保留以下證據:

測試情境應保存的證據
小輸入status、baseline CPU、記憶體觀察與 latency
大輸入Worker 是否被呼叫、失敗 threshold 是否移動、response status
停用昂貴轉換CPU 或記憶體下降幅度,確認是否隔離到熱點
連續請求是否有跨 invocation 成長、global state 是否膨脹
新的 paid CPU 設定實際 configured limit 與相同 workload 的結果
正式部署後相同 route/version 的 Workers Logs、tail latency 和 1102 次數

如果改完後 1102 次數下降,這是有用的訊號,但仍要檢查下一個更大 payload、錯誤回應是否可預期,以及 log 是否能保留下一次定位所需的 resource 資訊。不要只把成功率改善解讀成「記憶體問題已永久消失」。

判斷 Error 1102 的核心順序很簡單:先分類,再量測,最後才改程式或方案。CPU 問題要減少同步工作、分批或拆出執行邊界;記憶體問題要限制資料量、串流處理並縮短大型物件的生命週期。Workers Logs 加上一組可重現的輸入邊界,才足以支持下一步決策。

常見問題#

Q: fetch() 等待時間會算進 Worker CPU limit 嗎?#

A: 網路等待本身不是 CPU time;但 fetch() 前後的 JSON parse、迴圈、轉換和序列化仍會消耗 CPU。應優化同步程式,不要只看 subrequest 數量或總 request duration。

Q: 升級到 paid Workers plan 就不會再有 Error 1102 嗎?#

A: 不會。paid plan 可能提供較高或可設定的 CPU time,但 1102 也可能是 isolate memory 超限。方案變更不能取代限制輸入、減少 buffering 和拆分長時間工作。

Q: Error 1102 和 413 request body error 是同一件事嗎?#

A: 不是。413 可能在 Worker 執行前由 edge、zone、API 或 origin 的大小限制回傳;1102 是 Worker runtime 處理時超過 CPU 或記憶體限制。先確認 Worker 是否實際被呼叫,再選排查路徑。

參考資料:

Cloudflare Support:Error 1102

Cloudflare Workers:Limits

Cloudflare Workers:Errors and exceptions

Cloudflare Workers:Performance and timers

Cloudflare Workers Error 1102 怎麼查?先分 CPU 與記憶體
https://laplusda.com/posts/cloudflare-workers-error-1102-cpu-memory/
作者
Zero
發佈於
2026-09-06
許可協議
CC BY-NC-SA 4.0
這篇文章有幫助嗎?

回報錯字、失效連結,或告訴我你想看的延伸主題。