symfony分析器是开发环境自带的性能分析系统,需满足app_env=dev、app_debug=1、web_profiler.toolbar未禁用、framework.profiler未设为false四项条件;工具栏点击可查看overview、timeline等标签页;cli场景需手动调用profiler服务采集数据;支持自定义datacollector扩展监控维度。

Symfony 分析器(Profiler)不是独立安装的工具,而是开发环境自带的性能分析系统,开箱即用,但必须满足两个硬性条件:环境为 dev 且 kernel.debug = true。它不适用于生产环境,也不支持手动“开启”——配置错误或环境不符时,它会静默失效,工具栏消失、数据不保存,且无明确报错提示。
确保分析器已启用
检查以下三项是否全部满足:
-
.env文件中设置APP_ENV=dev且APP_DEBUG=1 -
config/packages/dev/web_profiler.yaml中未将web_profiler: toolbar设为false -
config/packages/framework.yaml中未显式禁用 profiler:framework.profiler: false
任一条件不满足,工具栏都不会出现。验证方式:查看页面 HTML 源码末尾是否存在 <script id="sfwdt"></script> 片段。
使用 Web 调试工具栏快速定位问题
页面底部出现的 Symfony 工具栏是 Profiler 的入口。点击任意请求条目(如“200 OK”图标),即可进入该次请求的完整分析页。常用标签页包括:
- Overview:总耗时、内存峰值、SQL 查询数、模板渲染次数等概览指标
- Timeline:可视化时间轴,展示路由匹配、控制器执行、模板渲染、事件分发等各阶段耗时
- Doctrine:列出所有 SQL 查询,标出慢查询(> 100ms)、重复查询和 N+1 问题
- Memory:显示内存分配变化曲线,可对比不同请求识别内存泄漏迹象
在 CLI 或非 HTTP 场景中手动采集数据
命令行任务、消息队列消费者、单元测试等场景默认不触发 Profiler,需主动调用:
- 获取 profiler 服务:
$profiler = $this->getContainer()->get('profiler'); - 启用并创建 profile:
$profiler->enable(); $profile = new Profile(); $profile->setIp('127.0.0.1'); - 确保 Stopwatch 已启用(Profiler 依赖它计时):
$stopwatch = $this->getContainer()->get('stopwatch'); $stopwatch->start('my_task'); - 采集完成后调用:
$profiler->collect($request, $response, $exception);
采集的数据会存入 var/cache/dev/profiler/ 对应哈希目录,之后可通过 /_profiler 界面查看(需手动构造请求 ID 或用 profiler:search 命令查找)。
自定义数据收集与深度监控
可通过实现 DataCollectorInterface 添加业务维度数据,例如记录外部 API 调用耗时或缓存命中率。基础做法:
- 创建类(如
src/DataCollector/ApiDataCollector.php),实现collect()和getName() - 在
config/services.yaml中注册服务,并打上data_collector标签 - 在控制器中注入
Profiler并调用$profiler->add($collector),或通过事件监听器自动注入
收集的数据会出现在 Profiler 页面的对应新标签页中,支持序列化存储与前端展示。











