Upsun User Documentation

Continuous profiling for Node.js

Upsun Beta access

Test and provide feedback for our newest offering - Upsun!

You can register for the Beta by clicking here and completing the form.

Sign up for Beta access

Continuous profiling on Upsun Anchor to this heading

Upsun Continuous Profiling is powered by Blackfire. It is available directly from the Console under the Profiling tab of your environments.

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

Prerequisites Anchor to this heading

Upsun Continuous Profiler requires Node.js >= 16.0.0.

Installation Anchor to this heading

Get the Blackfire Continuous Profiler NodeJS library:

npm install @blackfireio/node-tracing
const Blackfire = require('@blackfireio/node-tracing');

NodeJS continuous profiler API Anchor to this heading

The NodeJS continuous profiler API has two functions:

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

function start(config) {} Anchor to this heading

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.

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)

function stop() {} Anchor to this heading

Stops the continuous profiling probe.

A simple example application Anchor to this heading

  1. Get the Continuous Profiler NodeJS library
npm install express @blackfireio/node-tracing
  1. Create index.js with the following code
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. Run the Node.js server
node index.js

Is this page helpful?