Configuring Blackfire Continuous Profiler for Node.js
Requires Production

The Node.js continuous profiling is currently made accross 2 dimensions:

  • wall-time: elapsed time per function call
  • heap: memory allocation and reserved space over time
  • Node.js >= 16.0.0
  • Blackfire Agent >= 2.13.0

Get the Blackfire Continuous Profiler Node.js library:

1
npm install @blackfireio/node-tracing

The Node.js continuous profiler API has two functions:

1
2
function start(config) {}
function stop() {}

The start function starts the continuous profiler probe. It collects profiling information in the background and periodically uploads it to the Blackfire Agent until the stop function is called.

1
2
3
4
5
6
7
8
9
const Blackfire = require('@blackfireio/node-tracing');

Blackfire.start({
    appName: 'my-app'
});

// your application...
// If needed, you can stop profiling before cpuDuration
// Blackfire.stop();

The Start function accepts an object as a parameter with the following keys:

  • appName: name of the application
  • durationMillis: time in milliseconds for which to collect profile (default: 45_000)
  • cpuProfileRate: average sampling frequency in Hz. (default: 100)
  • labels: Labels to add to the profile. (default: {})
  • uploadTimeoutMillis: Timeout in milliseconds for the upload request (default: 10000)

Stops the continuous profiling probe.

1
npm install express @blackfireio/node-tracing
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
const Blackfire = require('@blackfireio/node-tracing');
const express = require('express')
const crypto = require("crypto");
const app = express()
const port = 3000

app.get('/', (req, res) => {
    const salt = crypto.randomBytes(128).toString("base64");
    const hash = crypto.pbkdf2Sync("this is my password", salt, 10000, 512, "sha512");

    res.send('Hello World!');
})


app.listen(port, () => {
    console.log(`Example app listening on port ${port}`)
    Blackfire.start({appName: 'blackfire-example'});
})
1
node index.js