我正在运行一个express.js应用程序,该应用程序用作REST api。一个端点启动了puppeteer,并通过几个过程测试了我的网站。
启动应用程序并持续使用端点后,我的docker容器每小时都会耗尽内存,如下所示。
首先,我以为我的puppeteer / headless chrome中存在内存泄漏,但是随后我监视了进程中的内存使用情况,没有可见的内存泄漏,如您在此处看到的那样:
0.00 Mb COMMAND
384.67 Mb /var/express/node_modules/puppeteer/.local
157.41 Mb node /var/express/bin/www
101.76 Mb node /usr/local/bin/pm2
4.34 Mb /var/express/node_modules/puppeteer/.local
1.06 Mb ps
0.65 Mb bash
0.65 Mb bash
0.31 Mb cut
0.31 Mb cut
0.13 Mb dumb
现在,我没有任何想法可能是什么问题了。有谁知道RAM消耗可能来自何处?
答案 0 :(得分:5)
您需要实时监控活动。
我们没有代码,因此我们甚至不知道发生了什么。但是,您可以使用htop,gtop,netdata之类的更高级的工具以及top
或ps
以外的其他工具。
登录pm2
可能还会告诉您更多有关事情的信息。在这种情况下,日志将比流程管理器拥有更多的数据。确保彻底调查日志以查看脚本是否负责以及是否引发错误,
pm2 logs
及早计算成本并进行相应的准备,
自动化任务是否成功,请确保正确使用browser.close()
以确保其使用的资源免费。大多数时候,我们忘记了这么小的事情,而这却使我们付出了代价。
如果您有一个产生新进程的进程,并且没有实现好的信号处理程序来捕获子信号并停止子进程,则可以使用dumb-init或tini之类的东西停止等。
详细了解此SO answer。
答案 1 :(得分:1)