标准答案

  1. CPU profile 用于识别 JavaScript 计算、序列化、正则和同步调用热点。
  2. 火焰图展示采样时间分布,不直接说明内存泄漏、I/O 等待或业务正确性。
  3. 性能基准应同时记录吞吐、P50/P99、事件循环延迟、内存和下游请求量。
  4. 优化后使用相同输入和负载比较,并确认没有把 CPU 转移成更多内存或外部压力。

题目解析

CPU profile 和火焰图显示采样期间哪些栈占用执行时间,适合发现 JavaScript 计算、序列化、正则和同步调用热点,但不能直接说明内存泄漏、I/O 等待或业务正确性。

性能回归要固定 Node 版本、依赖、数据分布、流量模型和下游行为,并同时记录吞吐、P50/P99、event loop delay、内存和外部请求量。

优化最宽的栈不一定改善用户体验,可能只是把 CPU 转成更多内存、网络或数据库压力。修复后用相同场景对比,并确认错误率和数据结果没有退化。

常见误区

  • 误区:用开发模式 profile 代表生产。改正:在接近生产的版本、数据和启动参数下采样。
  • 误区:只优化最宽火焰图。改正:结合路由流量、P99、资源和业务影响确定优先级。
  • 误区:用平均响应时间判断尾延迟回归。改正:同时看 P95/P99、事件循环延迟、错误和下游排队。

作者信息