【问题标题】:nodejs - memory issue when processing many many json filesnodejs - 处理许多json文件时的内存问题
【发布时间】:2023-03-18 17:33:03
【问题描述】:

我使用puppeteerpuppeteer-cluster 对网页进行了性能测试。对于每个用户交互,都会生成一个 chrome dev tools 时间跟踪 json 文件。最后我得到了超过 18,000 个文件,大小在 6M-300K 之间。

我还写了一个脚本,对json文件一一处理,找出交互的开始时间、结束时间和持续时间,并生成最终的测试报告。该脚本在 5,000 个文件中运行良好,但在更多文件时出现“堆内存不足”错误。

实际上,对于每个json文件,一旦我得到我需要的数据(startTime、endTime和duration),我就想释放与文件相关的内存,因为我不再需要这些变量了。

如果无法在运行时释放内存,有没有办法强制我的脚本在预先分配的内存空间内工作?我的测试后脚本需要几个小时才能完成它的工作并不重要。

【问题讨论】:

  • 即时想法:通过子进程(一个子文件/请求/块)从 JSON 中提取数据,并在得到结果后终止子。不会消耗额外的内存。

标签: node.js json google-chrome-devtools out-of-memory puppeteer


【解决方案1】:

我的错!后期测试脚本中存在一个缺陷,该脚本包含对文件的许多引用。

【讨论】:

    【解决方案2】:

    您可以使用流来避免内存问题。 应该这样做

    import JSONStream from 'JSONStream'
    import fs from 'fs';
    
    const run = async (file) => {
      fs.createReadStream(file)
    
      const myData = [];
    
      await new Promise((resolve, reject) => {
        const stream = JSONStream.parse()
    
        stream.on('error', (error) => reject(error))
        stream.on('end', resolve)
    
        stream.on("data", function (data) {
          myData.push(data.startTime)
        })
      })
      
      return myData
    }
    
    run()
    

    【讨论】:

      猜你喜欢
      • 2018-07-03
      • 2014-05-14
      • 2016-07-29
      • 2012-11-04
      • 2010-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-30
      相关资源
      最近更新 更多