Your application will need to be using Node.js 14 or greater. This package is tested against current versions of Node.js: 14, 16, 18, and 20.
The pprof
module has a native component that is used to collect profiles with v8's CPU and Heap profilers. You may need to install additional dependencies to build this module.
pprof
has prebuilt binaries available for Linux and Alpine Linux for Node 14 and 16. No additional dependencies are required.@google-cloud/profiler
on environments that pprof
does not have prebuilt binaries for, the module node-gyp
will be used to build binaries. See node-gyp
's documentation for information on dependencies required to build binaries with node-gyp
.The pprof
CLI can be used to view profiles collected with this module. Instructions for installing the pprof
CLI can be found here.
Install pprof
with npm
or add to your package.json
.
# Install through npm while saving to the local 'package.json'
npm install --save pprof
Update code to collect and save a profile:
View the profile with command line pprof
:
Start program from the command line:
A wall time profile for the job will be saved in pprof-profile-${process.pid}.pb.gz
. View the profile with command line pprof
:
Enable heap profiling at the start of the application:
Collect heap profiles:
Collecting and saving a profile in profile.proto format:
View the profile with command line pprof
.
Collecting a heap profile with V8 allocation profile format:
const profile = await pprof.heap.v8Profile();
pprof -http=: heap.pb.gz
const profile = await pprof.heap.profile();
const buf = await pprof.encode(profile);
fs.writeFile('heap.pb.gz', buf, (err) => {
if (err) throw err;
})
// The average number of bytes between samples.
const intervalBytes = 512 * 1024;
// The maximum stack depth for samples collected.
const stackDepth = 64;
heap.start(intervalBytes, stackDepth);
pprof -http=: pprof-profile-${process.pid}.pb.gz
node --require pprof app.js
pprof -http=: wall.pb.gz
const profile = await pprof.time.profile({
durationMillis: 10000, // time in milliseconds for which to
// collect profile.
});
const buf = await pprof.encode(profile);
fs.writeFile('wall.pb.gz', buf, (err) => {
if (err) throw err;
});
Download Details:
Author: google
Official Github: https://github.com/google/pprof-nodejs
License: Apache-2.0 license