Browsershot / Puppeteer 超载 CPU 并超时

Browsershot / Puppeteer overloads CPU and times out

几个月来,我一直在使用 Browsershot 从我的网站上检索一些图片,没有任何问题,但最近(过去 1-2 周),请求已超时。进一步观察,我发现它在尝试执行命令时一直在消耗大量 cpu 电量。

据我所知,这种常量 CPU 耗尽将持续到我重新启动服务器为止。我在这个例子中也只要求制作一张图像,但是有chrome三个过程。我不确定这是否不正常。

为了确保它不是我网站上的东西或可能导致此问题的设置,我使用了一个简单的函数调用。

    Browsershot::url("https://example.com")
        ->setScreenshotType('png')
        ->save(Storage::path("overview_images/test.png"));

不幸的是,问题仍然存在。

我正在使用 Laravel 配置的 Forge 服务器,所以我使用了 Github page 推荐的安装。就像我说的,直到几周前它一直运行良好。当时没有对 Browsershot 进行任何会导致类似情况的更改。我试过按照步骤重新安装,还是这样。

非常感谢任何帮助!

编辑 1:

进一步调查后,我发现问题出在 Puppeteer,而不是 Browsershot。我尝试实施 example.js provided by Google,但我 运行 遇到了完全相同的问题。

编辑 2:

我以某种方式修复了它。我不能确切地说出它是怎么回事,但我可以为可能发现这个问题的其他人提供一些帮助。

运行ndb example.js,收到消息

Downloading Chromium r624492...
ERROR: Failed to download Chromium r624492!
Error: EACCES: permission denied

尽管我已经安装了 puppeteer(多次),但我猜它一直在尝试下载 Chromium,但都失败了。我认为这就是为什么 CPU 使用率如此之高并且在服务器重新启动之前从未停止过的原因。

话虽如此,我并没有做任何特别的改变,让它突然开始工作。如果它有帮助的话,这是我在突然开始工作时使用的一系列命令。

> node example.js // Didn't Work. Would be in continuous command with high CPU usage until cancelled
> sudo npm install -g ndb
> ndb example.js // This is when I received the message about downloading Chomium
> node example.js // It worked ?

仍然不知道发生这种情况的确切原因,所以如果有人能弄清楚,我会将其作为一个悬而未决的问题。

编辑 3:

又坏了

我想我终于明白了。

从 Browsershot 的 Github 页面,它建议执行这些命令来安装 puppeteer。

curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
sudo apt-get install -y nodejs gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgbm1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget libgbm-dev libxshmfence-dev
sudo npm install --global --unsafe-perm puppeteer
sudo chmod -R o+rx /usr/lib/node_modules/puppeteer/.local-chromium

尽管 --unsafe-perm.

npm install 无法安装 puppeteer 的 chromium 部分

--unsafe-perm 更改为 --unsafe-perm=true 似乎已解决问题。

因此将命令更改为以下内容应该可以修复安装并实际下载 Chromium。

sudo npm install -g puppeteer --unsafe-perm=true