GitHub上一個4100星的項目,把瀏覽器里那個熟悉的火焰圖搬到了終端。沒人大張旗鼓宣傳,但用過的人都說:這才是性能分析該有的樣子。
samply 是個命令行采樣分析器,內核是 Firefox 的 profiler,卻能在 macOS、Linux、Windows 三端跑通。
對,就是那個你按 F12 在 Firefox 里見過的性能面板。Mozilla 把它從瀏覽器里抽出來,做成了一條命令。
一條命令,火焰圖直接彈出來
用法簡單到像是故意藏起來的。
想分析你的程序?前面加個前綴就行:
samply record ./my-application my-arguments
程序跑完,瀏覽器自動打開 profiler.firefox.com,火焰圖、調用棧、時間軸,全套可視化直接呈現。不需要導出 JSON,不需要手動上傳,管道已經鋪好。
Linux 用戶第一次用可能會遇到權限問題。samply 底層走 perf 事件,需要臨時放行:
echo '-1' | sudo tee /proc/sys/kernel/perf_event_paranoid
Windows 用戶更省事,加個 -a 就能錄制所有進程。符號解析也安排好了,Microsoft Symbol Server、Mozilla、Chrome 的符號庫都能接進來。
跨平臺性能工具的長期痛點,被它啃下來一塊
做跨平臺開發的人都知道,性能分析工具的生態是割裂的。
macOS 有 Instruments,Linux 有 perf,Windows 有 ETW。三套工具,三種輸出格式,三種學習曲線。想對比同一套代碼在不同平臺的表現?你得先成為三種工具的專家。
samply 的解法很直接:統一采樣層,統一可視化層。
采樣層因地制宜——macOS 用核心性能計數器,Linux 用 perf,Windows 用 ETW。但輸出格式是同一套 Firefox profiler 的 schema,UI 也是同一個。
這意味著你在 M3 MacBook 上看到的火焰圖,和同事在 WSL 里看到的是同一種顏色、同一種交互、同一種度量標準。
安裝方式暴露了這個項目的氣質
curl | sh、PowerShell 一鍵腳本、crates.io、源碼編譯,四條路全給你鋪好。
最符合 Rust 社區習慣的當然是 cargo install --locked samply。但如果你只想快速驗證一條性能瓶頸,curl 管道直接跑,十秒內出圖。
這種"不強迫你選擇陣營"的設計,在工具鏈項目里其實不多見。很多項目要么只服務包管理器用戶,要么只給二進制下載,samply 四條路并行,暗示了它的用戶畫像:從腳本小子到系統工程師,來者不拒。
Firefox Profiler 的隱藏資產
這個項目的聰明之處,在于復用而非重建。
Firefox Profiler 是 Mozilla 打磨了十多年的可視化引擎,處理過瀏覽器這種復雜度極高的調用棧。它的時間軸縮放、多線程視圖、搜索過濾、分享鏈接,都是實戰檢驗過的。
samply 沒有重新發明輪子,只是給這個引擎接了一個新的數據源。命令行采樣 + 瀏覽器可視化,這個組合在 2024 年看起來理所當然,但三年前項目啟動時,大部分同類工具還在死磕本地 GUI。
結果也很誠實:4.1k star,91 個 fork,沒有營銷預算,純靠口口相傳。
項目作者 mstange 是 Mozilla 的老員工,profile 領域的資深工程師。代碼庫里能看到他對符號解析的執念——samply-symbols、wholesym 這些子 crate,都是為跨平臺符號還原寫的底層基礎設施。
Windows 上的符號解析歷來是噩夢。PDB 格式私有、版本碎片化、服務器延遲高。samply 的做法是并行查詢多個 symbol server,本地緩存,失敗回退。這些細節不會出現在 README 里,但決定了工具在真實工程中的可用性。
誰在用?
從 issue 和討論區能窺見用戶畫像:Rust 編譯器開發者、游戲引擎團隊、嵌入式固件工程師、CI 性能回歸測試的維護者。
一個典型場景:某游戲工作室在 Linux 服務器上跑自動化性能測試,samply 生成 profile,上傳到內部 profiler.firefox.com 實例,策劃和程序在同一個 URL 里看數據。
另一個場景:Rust 開發者想分析 cargo build 的編譯瓶頸,samply record cargo build,等編譯完直接看是哪個 crate 的宏展開在拖慢全量構建。
這些用法沒有一個需要修改被分析程序的代碼,零侵入采樣是底線。
項目最近的發力點在 Windows 支持完善和符號解析提速。0.13 版本的安裝腳本已經比早期版本穩定很多,PowerShell 的 ExecutionPolicy 繞過也寫進了文檔。
但最有趣的信號來自生態:samply 的 profile 格式正在成為某種事實標準。其他語言的分析器開始輸出兼容格式,就為了蹭 Firefox Profiler 的可視化能力。
如果性能分析工具的終極形態是"采樣層可替換,可視化層統一",samply 可能提前押對了方向。但問題是:當所有人都依賴同一個瀏覽器里的 profiler UI,Mozilla 會怎么經營這個基礎設施?開源托管能撐多久,商業化路徑在哪里——這些答案,可能比工具本身更值得觀察。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.