无法 运行 多节点子进程而不阻塞 DigitalOcean

Unable to Run Multiple Node Child Processes without Choking on DigitalOcean

我一直在努力 运行 DigitalOcean 上的多个 Puppeteer 实例很长一段时间,但运气不佳。我可以 运行 ~5 同时使用像 puppeteer-cluster 这样的工具,但由于某种原因,整个事情几乎没有什么有用的信息。因此,我转而在没有任何额外库的情况下生成 ~5 个子进程——只是 Puppeteer 本身。同样的问题。扼流圈没有有用的错误。

我能够 运行 在本地很好地完成所有这些工作,但在我部署之后,我遇到了这些问题。所以,我的直觉是这是一个 resource/performance 问题,但我不能肯定地说。

我正在 运行在 Digital Ocean 上安装 1GB 和 3CPU 的 Droplet。

基本上,我只是在寻找解决此类问题的方法。有没有一种方法可以确定我正在使用资源墙?我试过 pm2 和 DO 仪表板图,但我觉得这些都遗漏了很多信息,或者我完全遗漏了其他东西。

很可能您 运行 内存不足,5 个 puppeteer 进程对于 1GB VM 来说已经很多了。

你可以运行

grep -i 'killed process' /var/log/messages

确认 OOM 杀手终止了您的进程。

puppeteer-cluster 的作者在这里。你是对的,1 GB 内存可能不足以用于 运行ning 5 浏览器 windows(或选项卡)以及你的操作系统甚至其他后台任务。

这是您应该检查的资源列表:

  • Memory:使用 htop 之类的工具来检查您的应用程序 运行ning 时的内存使用情况。
  • CPU:同样,您可以使用 htop,3 vCPUs 应该足够 5 windows.
  • 磁盘space:使用像df这样的工具检查磁盘上是否有足够的space。我知道磁盘上没有足够 space 的多种情况(比如一些旧内核填满了磁盘),而 Chrome 至少需要 一些 space 到 运行.
  • 网络吞吐量:很少出现问题,但有时网络带宽不足以支持打开许多浏览器。使用 nload 之类的工具检查网络吞吐量。

要使用 htopnload,您可以在后台启动脚本 (node script.js &) 或使用终端多路复用器(如 tmux)。资源问题应该很容易发现。