
本文旨在帮助开发者解决在使用Puppeteer在Heroku上进行网页数据抓取时,程序运行次数受限的问题。通过分析常见原因,特别是内存泄漏问题,并提供相应的解决方案,确保Puppeteer应用在Heroku环境下稳定可靠地运行。
在Heroku上部署Puppeteer应用时,经常会遇到程序只能运行几次就停止的情况,这通常与Heroku的资源限制有关。一个常见的原因是内存泄漏,导致Dyno内存耗尽,程序崩溃。
Puppeteer在运行过程中会占用大量内存,如果每次抓取数据后没有正确释放资源,就会造成内存泄漏。以下是一些排查内存泄漏的方法:
日志分析: 仔细查看Heroku的日志,寻找与内存相关的错误信息,例如TimeoutError。
代码审查: 检查Puppeteer代码,特别是循环抓取数据的部分,确保每次操作后都正确关闭了Browser和Page实例。
最常见的解决方案是在每次抓取数据后,显式地关闭Browser实例,释放占用的内存。
const puppeteer = require('puppeteer');
async function scrapeData(code) {
const browser = await puppeteer.launch({
args: [
'--no-sandbox',
'--disable-setuid-sandbox'
]
});
const page = await browser.newPage();
await page.goto("website url");
await page.type('#crit-keyword', code);
await page.click('#search-button');
await page.waitForSelector(".result__headline");
await page.click(".result__headline");
await page.waitForSelector("div.text:nth-child(2)");
let data = await page.evaluate(() => {
let classTitle = document.querySelector("div.text:nth-child(2)").textContent
.toLowerCase().split(' ')
.map((s) => s.charAt(0).toUpperCase() + s.substring(1)).join(' ').replace('Ii', "II");
let classDesc = document.querySelector(".section--description > div:nth-child(2)").textContent.replace('Lec/lab/rec.', '').trim();
return {
title: classTitle,
desc: classDesc
};
});
console.log(`== Finished grabbing ${code}`);
// 确保关闭browser实例,释放内存
await browser.close();
return data;
}
module.exports = { scrapeData };注意事项:
除了关闭Browser实例外,还可以考虑以下优化方案:
headless模式: 使用headless模式运行Puppeteer可以减少内存占用。
const browser = await puppeteer.launch({
headless: true, // 启用headless模式
args: [
'--no-sandbox',
'--disable-setuid-sandbox'
]
});资源限制: 如果内存仍然不足,可以考虑升级Heroku Dyno的配置,增加内存。
请求队列: 如果抓取任务数量很多,可以考虑使用请求队列,限制并发请求数量,避免瞬间占用过多内存。
超时设置: 适当调整page.goto()和page.waitForSelector()等函数的超时时间,避免因网络问题导致程序长时间等待,占用内存。
在使用Puppeteer在Heroku上进行网页数据抓取时,内存泄漏是一个常见的问题。通过显式关闭Browser实例,以及其他优化方案,可以有效解决该问题,确保程序稳定可靠地运行。务必仔细审查代码,排查潜在的内存泄漏点,并根据实际情况调整配置,以达到最佳性能。
以上就是解决Heroku上Puppeteer运行次数受限问题:内存泄漏排查与优化的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号