服务器上永远的节点(npm 包)内存泄漏

Node forever (npm package) memory leak on the server

我正在使用 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

还要提一下,当 运行 本地没有 forever 时,脚本不会发生内存泄漏。我 运行 它在 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 包的原因是因为我的脚本需要很多时间来完成它所做的事情并且我的 SSH 会话会结束,我 运行 在常规中的 Node 脚本也会结束方法。

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

在 6900 兆的 "used" RAM 中,5469 用作缓冲区缓存。 Linux 将在进程请求内存时自动减少此数量。

如果您希望在您注销后(或您的 SSH 会话被终止后)运行 长进程保持 运行,您有多种不需要 [=11] 的选项=]:

  • 后台处理,确保忽略任何 "logout" 信号:

    $ nohup node script.js &
    
  • 使用像tmux or screen这样的终端多路复用器。