v8-profiler-next

    1.5.1 • Public • Published

    v8-profiler-next

    npm version Package Quality Linux/osx build status windows build status downloads info license

    Description

    v8-profiler-next provides node bindings for the v8 profiler.

    I. Quick Start

    • Compatibility
      • node version: v4.x ~ v16.x
      • platform: mac, linux, windows

    take cpu profile

    'use strict';
    const fs = require('fs');
    const v8Profiler = require('v8-profiler-next');
    const title = 'good-name';
    
    // set generateType 1 to generate new format for cpuprofile
    // to be compatible with cpuprofile parsing in vscode.
    v8Profiler.setGenerateType(1);
    
    // ex. 5 mins cpu profile
    v8Profiler.startProfiling(title, true);
    setTimeout(() => {
      const profile = v8Profiler.stopProfiling(title);
      profile.export(function (error, result) {
        // if it doesn't have the extension .cpuprofile then
        // chrome's profiler tool won't like it.
        // examine the profile:
        //   Navigate to chrome://inspect
        //   Click Open dedicated DevTools for Node
        //   Select the profiler tab
        //   Load your file
        fs.writeFileSync(`${title}.cpuprofile`, result);
        profile.delete();
      });
    }, 5 * 60 * 1000);

    take heapsnapshot

    'use strict';
    const v8Profiler = require('v8-profiler-next');
    const snapshot = v8Profiler.takeSnapshot();
    // 1. not as stream
    snapshot.export(function (error, result) {
    	if (error){
    		console.error(error);
    		return;
    	}
    	console.log(result);
    	snapshot.delete();
    });
    // 2. as stream
    const transform = snapshot.export();
    transform.pipe(process.stdout);
    transform.on('finish', snapshot.delete.bind(snapshot));

    take allocation profile

    Attention: If node version < v12.x, please use sampling heap profiling alone without cpu profiling or taking snapshot.

    'use strict';
    const v8Profiler = require('v8-profiler-next');
    // set a leak array
    const arraytest = [];
    setInterval(() => {
      arraytest.push(new Array(1e2).fill('*').join());
    }, 20);
    // start 1min sampling profile
    v8Profiler.startSamplingHeapProfiling();
    setTimeout(() => {
    	// stop and get allocation profile
    	const profile = v8Profiler.stopSamplingHeapProfiling();
    	// upload shf.heapprofile into chrome dev tools -> Memory -> ALLOCATION PRODILES
      require('fs').writeFileSync('./shf.heapprofile', JSON.stringify(profile));
    	console.log(profile);
    }, 60 * 1000);

    II. License

    MIT License

    Copyright (c) 2018 team of v8-profiler, hyj1991

    Install

    npm i v8-profiler-next

    DownloadsWeekly Downloads

    22,042

    Version

    1.5.1

    License

    MIT

    Unpacked Size

    59.2 kB

    Total Files

    25

    Last publish

    Collaborators

    • hyj1991