puppeteer卡死怎么办?

发现服务器上跑的进程进场会卡死,必须要手动重启一下才行,一开始以为是服务器配置不行,但是后来一想,我之前运行的代码一直在跑着也没出什么事情,为啥这次就不行了呢?

于是仔细地检查了一下,发现了一个问题。

可以持续运行的代码是只执行了一次puppeteer.lanuch(),而不可以持续运行的代码是执行一次后关闭重启再执行,这样的话,启动可能会造成资源的浪费,内存溢出等等,导致Linux服务器无法启动chrome,而这时没有增加启动判断得话,会导致进程一直卡在这个位置上不动。
所以其实应该首先浏览器,然后不关闭浏览器,关闭page页面,这样就会持续使用同一个浏览器了。

假设我现在有一个函数,是一个循环执行的函数。

1
2
3
4
async function getData(msg){
const browser = await puppeteer.launch()
const page = await browser.newPage()
}

这样每次执行这个getData函数,我们都需要启动一次chrome,导致资源占用率升高,如果所有的进程卡在同一时间启动得话,会发生启动失败现象,所以我们应该首先启动一个chrome然后不断地在里面打开page。

1
2
3
4
const browser  = await puppeteer.launch()
async function getData(msg,browser){
const page = await browser.newPage()
}

也就是这样,这样就能防止启动超时了。

作者

datehoer

发布于

2022-02-14

更新于

2023-10-19

许可协议

评论