真實系統、效能與前沿

追蹤與剖析

追蹤與剖析是窺看執行中系統內部、回答每位效能工程師都會問的問題——「時間都去哪了?」——的兩種主要方式。想像一位醫師手握兩件儀器:一具偶爾取樣你心跳以估計整體狀態的聽診器,以及一台把每一次跳動都即時記錄下來的心電圖機。剖析是那具週期取樣的儀器;追蹤是那台記錄每個事件的儀器。兩者都把一個不透明、飛快變動的系統,變成你真能看見的東西。

剖析(profiling)靠取樣運作:它一秒打斷程式許多次,記下此刻正在執行的是哪個函式,再建立一幅「時間多半花在哪」的統計圖像——非常適合在不記錄一切的情況下找出熱點。追蹤(tracing)則是在事件發生時記錄特定事件——每一次系統呼叫、每一次環境切換、每一次函式進入——給你一條可重播的精確時間軸,用以理解某個序列或某個罕見的小故障。經典工具組正反映了這道分野:perf 對 CPU 活動取樣並讀取硬體效能計數器;ftrace 追蹤 Linux 核心內部的事件與函式呼叫;DTrace(源自 Solaris,現在也在 macOS 與 BSD 上)開創了對核心與應用程式都安全、可程式化、全系統的追蹤。每一種都讓你觀看作業系統真正在做什麼,而非靠猜。

誠實的提醒是觀察者效應:量測是有代價的,插樁愈重,就愈會擾動你正在量測的那件事本身——追蹤每個事件本身就可能拖慢系統並讓資料淹沒你。剖析便宜但只是統計性的(它可能漏掉取樣之間的罕見事件);完整追蹤精確但昂貴。良好的做法是先用輕量、低開銷的取樣找出大致範圍,再只在需要細節之處加上聚焦的追蹤。

一個網頁服務在負載下很慢。你跑剖析器十秒,它回報 70% 的 CPU 時間落在某個 JSON 解析函式裡——一個你絕對猜不到的熱點。接著你追蹤那個函式的呼叫,確認它被叫用的次數遠超預期,並修正真正的原因:一個迴圈在重複解析同一份資料。

剖析找出熱點;追蹤確認其背後的精確序列。

當心觀察者效應:插樁並非免費。沉重的追蹤可能慢到改變系統的行為,所以你收集到的數字未必反映系統在未被打擾下運行的樣貌。

又稱
observability toolsperf, ftrace, DTrace效能分析工具