0

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

Browsershot 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。我尝试实现Google 提供的 example.js,但遇到了完全相同的问题。

编辑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:

它又坏了。

4

1 回答 1

0

我想我终于想通了。

从 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.

更改--unsafe-perm--unsafe-perm=true似乎已修复它。

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

sudo npm install -g puppeteer --unsafe-perm=true
于 2022-01-27T04:10:09.547 回答