几个月来,我一直在使用 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。我尝试实现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:
它又坏了。