How to request the Garbage Collector in node.js to run?

后端 未结 3 759
说谎
说谎 2020-11-30 00:58

At startup, it seems my node.js app uses around 200MB of memory. If I leave it alone for a while, it shrinks to around 9MB.

Is it possible from within the app to:

相关标签:
3条回答
  • 2020-11-30 01:22

    Node allows us to manually trigger Garbage Collection. This can be accomplished by running Node with --expose-gc flag (i.e. node --expose-gc index.js).
    Once node is running in that mode, you can programmatically trigger a Garbage Collection at any time by calling global.gc() from your program.

    ex -

    // Force garbage collection every time this function is called
    try {
      if (global.gc) {global.gc();}
    } catch (e) {
      console.log("`node --expose-gc index.js`");
      process.exit();
    }
    
    0 讨论(0)
  • 2020-11-30 01:35

    If you launch the node process with the --expose-gc flag, you can then call global.gc() to force node to run garbage collection. Keep in mind that all other execution within your node app is paused until GC completes, so don't use it too often or it will affect performance.

    You might want to include a check when making GC calls from within your code so things don't go bad if node was run without the flag:

    try {
      if (global.gc) {global.gc();}
    } catch (e) {
      console.log("`node --expose-gc index.js`");
      process.exit();
    }
    
    0 讨论(0)
  • 2020-11-30 01:46

    One thing I would suggest, is that unless you need those files right at startup, try to load only when you need them.

    EDIT: Refer to the post above.

    0 讨论(0)
提交回复
热议问题