pflames v1.1.0
pflames
pflames is a tool for generating
flamegraphs from various profile
formats.
The following formats are supported (detected by file extension):
*.cpuprofile, as generated by older Chrome DevTools, v8-profiler, cli-profile, etc.perf.data, as generated byperf recordon Linux.isolate*.log, as generated bynode --prof.
The data is processed from these formats into flamegraphs generated by Brendan Gregg's FlameGraph tool, saved to a local file based on the input filename, then immediately opened in your web browser.
Usage
Examples:
$ npm i -g cli-profile
$ cli-profile myscript.js
$ ls *.cpuprofile
profile1522910623600.cpuprofile
$ pflames profile1522910623600.cpuprofile$ # Note: Ensure your script has `process.on('SIGINT', process.exit)`
$ node --prof myscript.js
$ ls *.log
isolate-0x2259700-v8.log
$ pflames isolate-0x2259700-v8.log$ sudo perf record -i -g -F 99 -- node --perf-basic-prof myscript.js
$ pflames perf.dataYou can also compare two profiles of the same format by passing them both in. A difference flamegraph will be generated:
$ pflames thing1.cpuprofile thing2.cpuprofileYou can also use the same data to generate an icicle graph, so you can get a better view of what's calling a heavy function:
$ pflames --icicle thing1.cpuprofileEasily create perf.data files (Linux only)
You can use the run and attach commands to profile Node.js and other Linux
processes. This will run perf record behind the scenese to generate a
perf.data.
runspawns a process with the given command withperf record, profiling it for its entire lifetime. If the process binary being run isnode, it will add--perf-basic-profto the options. Examples:
# profile a Node.js app
$ pflames run node myapp.js
# profile a Rust app (you should use release builds for this)
$ pflames run target/release/myappattachstarts profiling a given PID until the that process exits, a SIGINT (Ctrl+C) is received, or a given number of seconds has elapsed.
# Assume PID 1234 is running and we want to profile it:
$ pflames attach 1234
# Now either Ctrl+C to finish profiling or wait for 1234 to finish
# Or profile it for exactly 5 seconds:
$ pflames attach 1234 5Both of these commands produce perf.data files which can be then processed
with plfames:
$ pflames perf.dataLicense
MIT License. See LICENSE.txt