- Notifications
You must be signed in to change notification settings - Fork0
FlameScope is a visualization tool for exploring different time ranges as Flame Graphs.
License
sophiexu/flamescope
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
FlameScope is a visualization tool for exploring different time ranges as Flame Graphs, allowing quick analysis of performance issues such as perturbations, variance, single-threaded execution, and more.
FlameScope begins by displaying the input data as an interactive subsecond-offset heat map. This shows patterns in the data. You can then select a time range to highlight on different patterns, and a flame graph will be generated just for that time range.
FlameScope is in early stages of development and under constant change, so bugs and issues are expected. We count on your support to find and report them!
The quickest way to get started is to run the pre-built client bundle:
$ git clone https://github.com/Netflix/flamescope$cd flamescope$ pip install -r requirements.txt$ python run.py
Then browse tohttp://127.0.0.1:5000/, and you can begin exploring profiles from theexamples
directory. You can add new profiles to that directory, collected using Linuxperf
. Here are instructions for a generic CPU profile at 49 Hertz for 120 seconds:
$ sudo perf record -F 49 -a -g -- sleep 120$ sudo perf script --header> stacks.myproductionapp.2018-03-30_01$ gzip stacks.myproductionapp.2018-03-30_01# optional
If you are profiling C++ code, you may want to pipe stacks throughc++filt
to get readable frames.
There are extra steps to fetch stacks correctly for some runtimes, depending on the runtime. For example, we've previously published Java steps inJava in Flames: java needs to be running with the -XX:+PreserveFramePointer option, andperf-map-agent must be run immediately after theperf record
to dump a JIT symbol table in /tmp.
FlameScope can visualize any Linuxperf script
output that includes stack traces, including page faults, context switches, and other events. See the References section below for documentation.
FlameScope is composed of two main components, the Python backend, and a React client interface. A pre-built client bundle is distributed with the backend, so the quickest way to get started is to install the Python requirements and start the application, as described earlier.
Although not necessary, westrongly suggest usingvirtualenv to isolate your Python environment.
By default, FlameScope will load a list of files from theexamples
directory, which includes a two profile examples.
FlameScope configuration file can be found inapp/config.py
.
DEBUG=True# run the web server in debug modeSTACK_DIR='examples'# path where flamescope will look for profilesHOST='127.0.0.1'# web server hostPORT=5000# web server portJSONIFY_PRETTYPRINT_REGULAR=False# pretty print api json responses
In order to build the client application from source, the following command line tools must be installed:
Once those tools are available, you will be able to install the project dependencies and generate a build.
$ yarn install$ npm run webpack
Thenpm run webpack
command will generate a new build underapp/public
. This directory is exposed by the Python web server.
Webpack can also watch and recompile files whenever they change. To build and start thewatch task, run the following command:
$ npm run webpack-watch
FlameScope provides a Dockerfile to build a Docker image:
$cd flamescope$ docker build -t flamescope.
The container expects the profiles to be bind-mounted into/stacks
and listens on port 5000. To view profiles from/tmp/stacks
, start the container with the following command:
$ docker run --rm -it -v /tmp/stacks:/stacks:ro -p 5000:5000 flamescope
Then access FlameScope onhttp://127.0.0.1:5000