【问题标题】:How to "free" memory Buffer from Garbage Collector in Node.js?如何从 Node.js 中的垃圾收集器“释放”内存缓冲区?
【发布时间】:2016-12-07 09:41:41
【问题描述】:

我想知道如何销毁缓冲区以释放内存。
我有下面的代码,它创建一个缓冲区并将其作为响应发送。这很好用,但是当我使用像 75 000 行这样的大数组时,我可以看到我的内存占用了 1Go,没关系,但是当发送响应时,这个内存被保留而不是空闲......我尝试设置 @ 987654321@ 到 null 在脚本末尾,但没有附加任何内容......有没有解决方案来释放这个内存?

var xlsxexport = require('node-xlsx');

module.exports = {
    exportExcel: function (req, res) {

        var excelData = []
        // ...
        // Construction of the array excelData
        // ...

        var buffer = xlsxexport.build([{name:'export', data:excelData}])
        res.set 'Content-Type', 'application/vnd.openxmlformats'
        res.set 'Content-Disposition', 'attachment; filename=' + filename
        res.send buffer
  }
}

【问题讨论】:

    标签: node.js express


    【解决方案1】:

    如果你真的确信你的代码没有泄漏,并且你已经将每个大变量都设置为null,那么你可以尝试启动 GC。

    在运行脚本时添加选项--expose-gc

    node --expose-gc index.js

    而且只要你想在你的脚本里面你可以调用 GC:

    global.gc()

    但我强烈建议你在不强制 GC 的情况下找到一些方法。

    祝你好运!

    【讨论】:

      【解决方案2】:

      首先,您使用的模块似乎对 75k 行造成了很大的开销,使用 CSV 格式不是更好吗?

      如果您确实想继续您的方法,有一些 V8 选项可以限制一些内存限制。限制内存限制可能会导致在垃圾收集上浪费更多时间,所以要小心过度优化。

      这是一个很好的起点:Limit Node.js memory usage to less than 300MB per process

      【讨论】:

        猜你喜欢
        • 2016-08-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-22
        • 1970-01-01
        • 2010-12-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多