A flame graph analyzer that states the conclusion
Flame graphs are a good way to see a profile and a poor way to be told what is wrong. Upload the stacks and read the findings.
A flame graph is an honest picture of a sample set, and reading one is a skill that takes practice: the widest frame is not always the problem, the x-axis is not time, and a shallow-but-everywhere frame hides in plain sight. flamelens reads the same stacks and writes down what they mean.
Any stack format you have
The lowest common denominator of every profiler.
- Folded stacks (`stackcollapse` output)
- Linux `perf` script output
- speedscope JSON from any producer
The frames a picture hides
Wide is obvious. Everywhere-but-narrow is the one that gets missed.
- Frames ranked by total cost across all stacks
- Self time separated from total time
Language-aware, not just string-aware
The stacks are read as the runtime that produced them.
- Runtime detected from the stack shape
- Fixes appropriate to that runtime, not generic advice
Evidence attached to every claim
You can check the work.
- Each finding cites the stacks behind it
Frequently asked questions
What is a folded stack file?
One line per unique stack, frames joined by semicolons, followed by a sample count. It is what Brendan Gregg's `stackcollapse` scripts emit and what most flame graph tooling consumes.
Why not just look at the flame graph?
Do — they are genuinely useful for seeing shape. The gap is that a flame graph shows you the sample set without ranking it, so a frame that is 3% of every request in forty places looks like nothing, while one wide frame in a rare path looks like everything.
Does the x-axis of a flame graph mean time?
No, and this is the single most common misreading. Frames are ordered alphabetically so identical stacks merge; width is share of samples, not chronology. Anything you conclude about ordering from a flame graph is an artefact.
Upload a profile. Leave with a plan.
Free to start — 10MB recordings, full reports, no card.
Create a free account