google/pprof-nodejs

pprof support for Node.js

JavaScript

291

470 commits

updated Jul 24, 2026

See the code

README

pprof support for Node.js

NPM Version Build Status Known Vulnerabilities

pprof support for Node.js.

Prerequisites

  1. Your application will need to be using Node.js 18 or greater. This package is tested against current versions of Node.js: 18, 20, and 22.

  2. The pprof module has a native component that is compiled on installation using node-gyp. You will need to install the build dependencies for node-gyp. See node-gyp's documentation for details on the dependencies required for your platform.

  3. The pprof CLI can be used to view profiles collected with this module. Instructions for installing the pprof CLI can be found here.

Basic Set-up

Install pprof with npm or add to your package.json.

# Install through npm while saving to the local 'package.json'
npm install --save pprof

Using the Profiler

Collect a Wall Time Profile

In code:

  1. Update code to collect and save a profile:

    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;
    });
    
  2. View the profile with command line pprof:

    pprof -http=: wall.pb.gz
    

Requiring from the command line

  1. Start program from the command line:

    node --require pprof app.js
    
  2. A wall time profile for the job will be saved in pprof-profile-${process.pid}.pb.gz. View the profile with command line pprof:

    pprof -http=: pprof-profile-${process.pid}.pb.gz
    

Collect a Heap Profile

  1. Enable heap profiling at the start of the application:

    // 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); 
    
  2. Collect heap profiles:

    • Collecting and saving a profile in profile.proto format:

      const profile = await pprof.heap.profile();
      const buf = await pprof.encode(profile);
      fs.writeFile('heap.pb.gz', buf, (err) => {
        if (err) throw err;
      })
      
    • View the profile with command line pprof.

      pprof -http=: heap.pb.gz
      
    • Collecting a heap profile with V8 allocation profile format:

        const profile = await pprof.heap.v8Profile();
      

Contributors

nolanmar511

229 commits

renovate-bot

74 commits

ofrobots

39 commits

renovate[bot]

34 commits

google/pprof-nodejs

pprof support for Node.js

JavaScript

291

470 commits

updated Jul 24, 2026

See the code

README

pprof support for Node.js

NPM Version Build Status Known Vulnerabilities

pprof support for Node.js.

Prerequisites

  1. Your application will need to be using Node.js 18 or greater. This package is tested against current versions of Node.js: 18, 20, and 22.

  2. The pprof module has a native component that is compiled on installation using node-gyp. You will need to install the build dependencies for node-gyp. See node-gyp's documentation for details on the dependencies required for your platform.

  3. The pprof CLI can be used to view profiles collected with this module. Instructions for installing the pprof CLI can be found here.

Basic Set-up

Install pprof with npm or add to your package.json.

# Install through npm while saving to the local 'package.json'
npm install --save pprof

Using the Profiler

Collect a Wall Time Profile

In code:

  1. Update code to collect and save a profile:

    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;
    });
    
  2. View the profile with command line pprof:

    pprof -http=: wall.pb.gz
    

Requiring from the command line

  1. Start program from the command line:

    node --require pprof app.js
    
  2. A wall time profile for the job will be saved in pprof-profile-${process.pid}.pb.gz. View the profile with command line pprof:

    pprof -http=: pprof-profile-${process.pid}.pb.gz
    

Collect a Heap Profile

  1. Enable heap profiling at the start of the application:

    // 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); 
    
  2. Collect heap profiles:

    • Collecting and saving a profile in profile.proto format:

      const profile = await pprof.heap.profile();
      const buf = await pprof.encode(profile);
      fs.writeFile('heap.pb.gz', buf, (err) => {
        if (err) throw err;
      })
      
    • View the profile with command line pprof.

      pprof -http=: heap.pb.gz
      
    • Collecting a heap profile with V8 allocation profile format:

        const profile = await pprof.heap.v8Profile();
      

Contributors

nolanmar511

229 commits

renovate-bot

74 commits

ofrobots

39 commits

renovate[bot]

34 commits

Languages

JavaScript

67.0%

TypeScript

24.8%

C++

5.2%

Shell

2.9%