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 会怎么经营这个基础设施?开源托管能撑多久,商业化路径在哪里——这些答案,可能比工具本身更值得观察。
热门跟贴