Heroku 赫罗库的木偶演员,记忆错误
试着让Heroku做些工作。在本地,它是有效的。它很慢,但很有效。在OS XHeroku 赫罗库的木偶演员,记忆错误,heroku,puppeteer,Heroku,Puppeteer,试着让Heroku做些工作。在本地,它是有效的。它很慢,但很有效。在OS X活动监视器中监视内存时,内存不会超过50MB。但是,当我将这个脚本部署到Heroku时,每次都会超过内存配额,内存占用比它大得多 查看日志,我得到了以下信息: 运行mem=561M(106.5%)的进程 错误R14(超出内存配额) 重新启动 状态从启动更改为启动 要么活动监视器没有正确报告内存,要么只有在Heroku上运行脚本时出现问题。我无法想象为什么一个25页的页面会是5.61亿页 此外,由于木偶演员脚本必须包含在t
活动监视器中监视内存时,内存不会超过50MB。但是,当我将这个脚本部署到Heroku时,每次都会超过内存配额,内存占用比它大得多
查看日志,我得到了以下信息:
运行mem=561M(106.5%)的进程
错误R14(超出内存配额)
重新启动
状态从启动更改为启动
要么活动监视器没有正确报告内存,要么只有在Heroku上运行脚本时出现问题。我无法想象为什么一个25页的页面会是5.61亿页
此外,由于木偶演员脚本必须包含在try/catch
中,内存错误导致Dyno崩溃并重新启动。当Dyno重新启动时,浏览器将挂起。因此,重新启动
没有什么好处。有没有一种方法可以捕获Heroku上的“大多数”错误,但在出现内存R14错误时抛出?我也有类似的问题。我发现,如果不关闭浏览器,就会立即出现R14错误。我的建议是:
确保使用单个浏览器实例和多个上下文,而不是多个浏览器
确保在调用pdf后关闭上下文
如果您正在处理大型页面,需要扩展heroku实例,那么您别无选择。不幸的是,你需要为heroku上的1GB内存支付50美元
一些难看的代码,但它指出了这样一个事实:在调用pdf函数后,上下文是关闭的
browser.createIncognitoBrowserContext()。然后((上下文)=>{
context.newPage()。然后((页面)=>{
page.setContent(html)。然后(()=>{
page.pdf(选项)。然后((pdf)=>{
让inputStream=bufferToStream(pdf);
让outputStream=fs.createWriteStream(路径);
inputStream.pipe(outputStream).on(“finish”,()=>{
context.close()。然后(()=>{
解决();
}).捕获(拒绝);
});
});
}).捕获(拒绝)
}).捕获(拒绝)
}).捕获(拒绝)代码>