Use the perf record and perf script commands on Linux to generate input to cpuprofilify and the provided
profile_1ms.d script to do so on OSX via dtrace.
Example
using DTrace script
# In Terminal A
➝ sudo profile_1ms.d -c 'node --perf-basic-prof example/fibonacci' | \
cpuprofilify > /tmp/example.cpuprofile
pid <process-pid>
HTTP server listening on port 8000
# In Terminal B
➝ ab -n 6 -c 2 http://:::8000/1000/
This is ApacheBench, Version 2.3 <$Revision: 1554214
gt;
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking :: (be patient).....done
[ .. ]
➝ sudo kill <process-pid>
Now open /tmp/example.cpuprofile in Chrome DevTools Profiles - Load
NOTE: in order to try the above example please clone this repository.
Usage
cat trace.txt | cpuprofilify <options> > my.cpuprofile
Converts the given trace taking according to the given opttions
OPTIONS:
--unresolveds , --nounresolveds unresolved addresses like `0x1a23c` are filtered from the trace unless this flag is set (default: false)
--sysinternals , --nosysinternals sysinternals like `__lib_c_start...` are filtered from the trace unless this flag is set (default: false)
--v8internals , --nov8internals v8internals like `v8::internal::...` are filtered from the trace unless this flag is set (default: false)
--v8gc , --nov8gc when v8internals are filtered, garbage collection info is as well unless this flag set (default: true)
--shortStack , --noshortStack stacks that have only one line are ignored unless this flag is set (default: false)
--optimizationinfo, --nooptimizationinfo JS optimization info is removed unless this flag is set (default: false)
--type type of input `perf|dtrace`. If not supplied it will be detected.
--help print this help
EXAMPLE:
Generate cpuprofile from DTrace data with default options
using higher switchrate in order to deal with large amount of data being emitted
sudo profile_1ms.d -x switchrate=1000hz -c <command> | cpuprofilify > out.cpuprofile
Generate cpuprofile from DTrace data with default options keeping v8 internals
sudo profile_1ms.d -c <command> | cpuprofilify --v8internals > out.cpuprofile
Generate cpuprofile from DTrace data with default options filtering v8 gc events
sudo profile_1ms.d -c <command> | cpuprofilify --nov8gc > out.cpuprofile
cpuprofilify and perf
use this on any system that doesn't have DTrace, but perf instead like Linux
Converts the given trace taking according to the given opts.
var cpuprofilifier = require('cpuprofilifier');
var cpuprofile = cpuprofilifier().convert(trace);
fs.writeFileSync('/tmp/my.cpuprofile', JSON.stringify(cpuprofile));
Parameters:
Name
Type
Argument
Description
trace
Array.<String>
a trace generated via perf script or the profile_1ms.d DTrace script
opts
Object
<optional>
Properties
Name
Type
Description
map
string
a map containing symbols information, if not given it will be read from /tmp/perf-.map.
type
string
type of input perf|dtrace. If not supplied it will be detected.
shortStack
Boolean
stacks that have only one line are ignored unless this flag is set
optimizationinfo
Boolean
JS optimization info is removed unless this flag is set (default: false)
unresolveds
Boolean
unresolved addresses like 0x1a23c are filtered from the trace unless this flag is set (default: false)
sysinternals
Boolean
sysinternals like __lib_c_start... are filtered from the trace unless this flag is set (default: false)
v8internals
Boolean
v8internals like v8::internal::... are filtered from the trace unless this flag is set (default: false)
v8gc
Boolean
when v8internals are filtered, garbage collection info is as well unless this flag set (default: true)