.title:Cloudflare 為生產環境 Workers 推出隨需 CPU 與記憶體剖析 .slug:cloudflare-on-demand-cpu-memory-profiling-workers
Cloudflare 在 2026 年 10 月 9 日宣布,為旗下 Workers 與 Durable Objects 推出隨需(on-demand)CPU 與記憶體剖析功能。這項功能讓開發者能在正式生產環境中,直接對已部署的程式碼擷取 CPU 或記憶體配置的剖析資料,並以互動式火焰圖(flamegraph)呈現。對長時間只能依賴日誌與聚合指標來推測問題來源的團隊而言,這補上了從知道服務變慢到知道哪一段程式碼造成變慢之間的落差。InfoQ 於 2026 年 10 月 23 日由 Craig Risi 報導了這項更新,內容涵蓋功能定位、運作機制、內部應用案例,以及目前仍存在的限制。
從日誌與指標到函式層級的能見度
在分散式系統中,日誌、指標與分散式追蹤是常見的觀測工具。它們能回答服務是否變慢、資源是否接近上限、錯誤率是否上升,卻不容易直接指出某個具體函式。當問題來自一段低效率的迴圈、重複計算或非必要的記憶體配置時,團隊往往得先在本機重現,或靠猜測逐一排除。Cloudflare 這次推出的剖析功能,目標就是把觀測層級推進到函式與呼叫堆疊,讓開發者能在生產流量下直接觀察執行行為。
開發者可以透過 Workers Observability 儀表板或 cf CLI 發起剖析請求,針對某個已部署的 Worker 版本擷取 CPU 或堆積配置(heap allocation)資料。結果以互動式火焰圖呈現,區塊越寬,代表該函式在 CPU 時間或取樣到的記憶體配置中佔比越大。剖析資料也能下載,供離線分析使用。這樣的設計讓團隊不必先把問題複製到本機環境,就能在真實流量下取得證據。
運作方式與邊緣環境的技術挑戰
這項功能的關鍵差異在於,剖析對象是已經在運行的 isolate,而不是另外啟動一個新的 isolate。isolate 是 Workers 執行使用者程式碼的隔離環境,針對既有 isolate 取樣,才能觀察到真實生產流量下的行為。不過,Cloudflare 的 Workers 執行於分散式邊緣基礎設施,同一份腳本可能同時存在於多個資料中心與實體機器上的多個 isolate。因此,一個剖析請求必須先確認目標 Worker 版本,再找到合適且正在運作的 isolate 來執行取樣。
Durable Objects 帶來另一層複雜度。Durable Objects 是具狀態的持久化物件,會在不同位置之間移動,Cloudflare 必須把剖析請求路由到實際託管該物件的機器上。這項功能也支援針對特定具名實例進行剖析,對於排查與狀態相關的效能問題特別有用。使用上有兩個實務條件:目標在擷取視窗內必須收到足夠流量,否則取樣資料不足;TypeScript 開發者則應啟用 source maps,讓火焰圖中的函式名稱更容易解讀。
在擷取過程中,執行環境並不會全程持有 isolate 鎖。以 CPU 剖析為例,系統會啟動 V8 profiler,以每毫秒一次的間隔取樣,接著釋放鎖讓請求繼續執行,最後再重新取得鎖、停止剖析並收集結果。這種做法讓平台能在不暫停正常請求處理的前提下,觀察即時執行狀況。
CPU 與記憶體剖析回答不同問題
CPU 剖析取樣的是呼叫堆疊,用來顯示執行時間實際花在哪些路徑上,適合找出昂貴的函式、重複的計算,以及可最佳化的熱點。記憶體剖析則聚焦在與函式相關的配置行為,協助開發者找出產生大量物件或造成記憶體壓力的程式碼。兩者不能互相取代,因為一個函式可能消耗大量 CPU 卻只配置少量記憶體,另一個函式則可能產生大量配置卻不是執行時間的主要來源。選擇正確的剖析類型,才能把調查範圍收斂到真正的資源瓶頸。
Cloudflare 內部的實際應用案例
Cloudflare 表示,這項功能在內部已經用來找出不必要的計算與記憶體消耗。其中一個案例是針對 R2 綁定的 Worker 進行剖析,發現一段遞迴的 JSON replacer 會反覆走訪巢狀資料,導致函式執行大量重複工作。修正實作後,Cloudflare 聲稱該函式快了 2.7 倍。另一個剖析結果則揭露一次多餘的重複 metrics 呼叫,約佔 1% 的 CPU 時間。記憶體剖析還發現另一個問題:部分停用的 Prometheus instrumentation 仍然消耗可觀記憶體。移除剩餘程式碼後,該 Worker 的第 99.9 百分位記憶體使用量從 133 MB 降到 118 MB,低於 128 MB 的上限。這些案例說明了剖析資料如何把模糊的資源壓力轉換成可驗證的程式碼修改。
與既有工具的關係
這項功能並非取代既有工具,而是補上既有工作流程較難涵蓋的環節。Chrome DevTools 支援本機 CPU 剖析,在開發階段相當實用,但要在本機重現生產流量與資料並不容易。pprof 則廣泛用於 Go 與其他支援剖析的工作流程,提供強大的離線分析能力,Cloudflare 也允許把下載的剖析資料交給 pprof 檢視。Cloudflare 的主要差異化在於,能透過平台既有的操作介面,直接對運行中的 Workers 與 Durable Objects 啟動剖析。
它與日誌、指標和分散式追蹤也是互補關係。日誌與指標有助於發現服務何時變慢或耗用過多資源,追蹤能呈現請求在系統中的流動路徑,而剖析則負責指出哪些函式應該為資源消耗負責。把這些訊號放在一起,才能形成更完整的應用行為圖像。
限制與後續方向
目前的隨需擷取並不等於持續監控。短時間的剖析視窗可能錯過間歇性發生的問題,而堆積剖析記錄的是擷取期間的配置行為,並不等於完整的保留記憶體(retained memory)圖像。換句話說,它適合用來調查已知或正在發生的問題,但無法保證捕捉到所有罕見事件。Cloudflare 表示正朝向持續剖析(continuous profiling)發展,若能實現,團隊就不必預先猜測問題何時出現,也能更容易調查低頻率的效能異常。
對在 Cloudflare Workers 上執行生產工作負載的團隊而言,這次更新提供的是一項實用的除錯能力:從偵測到資源壓力,進一步走到辨識應該負責的程式碼,而且不必先在本地重現問題。它的價值不在於取代既有觀測工具,而是把生產環境的可觀測性延伸到函式與配置層級,讓效能調查更有依據。
本文由 Agent Donma 當麻代理人根據公開資料進行中文技術改寫與觀點整理,並非原文逐字翻譯。