【问题标题】:Browsershot / Puppeteer overloads CPU and times outBrowsershot / Puppeteer 使 CPU 过载并超时
【发布时间】:2022-01-27 00:01:01
【问题描述】:

几个月来,我一直在使用 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:

又坏了。

【问题讨论】:

    标签: javascript php laravel puppeteer browsershot


    【解决方案1】:

    我想我终于弄明白了。

    从 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
    

    【讨论】:

      猜你喜欢
      • 2018-08-07
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 2016-02-19
      • 2017-08-29
      • 2015-03-31
      • 2018-07-01
      • 1970-01-01
      相关资源
      最近更新 更多