node.js - 服务器上的 Node Forever(npm 包)内存泄漏

标签 node.js ubuntu forever

我正在使用 forever 包来运行我的 Node.js 脚本。 (不是网络服务器)。但是,正因为如此,我出现了内存泄漏,即使停止所有进程后,我的内存仍然被占用:

root@aviok-cdc-elas-001:~# forever stopall
info:    No forever processes running
root@aviok-cdc-elas-001:~# forever list
info:    No forever processes running
root@aviok-cdc-elas-001:~# free -lm
             total       used       free     shared    buffers     cached
Mem:         11721       6900       4821          5        188       1242
Low:         11721       6900       4821
High:            0          0          0
-/+ buffers/cache:       5469       6252
Swap:            0          0          0

还要提一下,当本地运行时,脚本不会出现内存泄漏,而不会永远。我在 Ubuntu 服务器上运行它。如果我现在重新启动服务器:

root@aviok-cdc-elas-001:~# reboot

Broadcast message from root@aviok-cdc-elas-001
        (/dev/pts/0) at 3:19 ...

The system is going down for reboot NOW!

我的 RAM 将再次空闲:

root@aviok-cdc-elas-001:~# free -lm
             total       used       free     shared    buffers     cached
Mem:         11721       1259      10462          5         64        288
Low:         11721       1259      10462
High:            0          0          0
-/+ buffers/cache:        905      10816
Swap:            0          0          0

我还想提一下,当我的脚本完成它正在做的事情(并且最终完成)时,我有 db.closeprocess.exit 调用来进行确保我的脚本中的所有内容都被杀死了。然而,即使在 RAM 被拿走之后。现在我知道,永远会在脚本被杀死后再次运行该脚本。所以我的问题是:

  • 如果脚本完成,我如何告诉forever不再执行脚本?
  • 如何正确地永远停止,以便在停止后不占用任何 RAM?

我为此使用forever包的原因是因为我的脚本需要很多时间来完成它所做的事情,并且我的SSH session 将结束,我以常规方式运行的Node脚本也会结束。

最佳答案

据我所知,RAM 并没有被拿走或泄漏,而是被 Linux 用作文件系统缓存(因为未使用的 RAM 是浪费的 RAM)。

在 6900 兆“已用”RAM 中,5469 兆用作缓冲区高速缓存。当进程请求内存时,Linux 会自动减少此数量。

如果您希望长时间运行的进程在您注销后(或在您的 SSH session 被终止后)继续运行,您有多种不需要永远的选项:

  • 后台进程,确保忽略任何“注销”信号:

    $ nohup node script.js &
    
  • 使用终端多路复用器,如 tmuxscreen .

关于node.js - 服务器上的 Node Forever(npm 包)内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39815203/

相关文章:

ubuntu - 如何使用永远和启动脚本在 ubuntu 上修复 "Error: MONGO_URL must be set in environment"?

javascript - 部署到 Vercel 时,Sendgrid 电子邮件不会发送

node.js - 开发中需要在 "/static"前追加子目录

linux - cloudera-scm-server 已死,pid 文件存在

c++ - 编译一个 MSVC++2010 项目使其可以在 Ubuntu 上运行

javascript - forever js 正在停止另一个应用程序

node.js - 以其他用户身份执行作业

angularjs - 如何使用 angularjs 从物理路径下载 Excel 文件

javascript - webpack 和 babel-polyfill : Can't resolve 'core-js/modules/es6.array.map' in source directory

c - 如何在 Ubuntu 中安装 libwebsocket 库?