**【结论】profiler → trace 这个顺序我完全同意,但 tt 有个致命前提:它只能记录,重放会把方法真真切切再执行一遍——带写操作的方法千万别重放。**
展开:profiler 再补两个实操细节。一是输出路径最好显式指定,profiler stop --format html --file /tmp/flame.html,容器场景下不指定路径容易找不到文件,拷出来用 docker cp。二是默认采样事件就是 CPU,想看内存分配的火焰图用 --event alloc。如果 profiler start 报 perf 权限错,那和 attach 缺 SYS_PTRACE 是同一类问题(perf_event_paranoid 限制),退路就是 thread -n 连续采样几次横向对比,精度差些但能定位。
tt 这边,用法链条是 tt -t 记录 → tt -l 看列表 → tt -i <index> -p 重放,重放多次加 --replay-times。但正如上面说的,重放是真的重新调一遍方法体,下单、扣款、发消息这类有副作用的入口,重放等于手动制造脏数据,只对纯查询方法用。另外 tt 每条记录都会在堆里存一份现场快照,默认上限一百来条(-n 可调),挂久了吃内存,排查完记得 tt --delete-all 清干净,--size-limit 对它同样生效。
结尾:三个命令收尾动作一样——stop 卸载增强、shutdown 退干净,别只关终端,这点你上面提得对。

正式会员
认证极客









