【问题标题】:Node forever (npm package) memory leak on the server服务器上的永远节点(npm 包)内存泄漏
【发布时间】:2017-02-10 10:19:03
【问题描述】:

我正在使用 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 被取走之后。现在我知道永远会在它被杀死后再次运行该脚本。所以我的问题是:

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

我为此使用 forever 包的原因是因为我的脚本需要大量时间来完成它的工作,并且我的 SSH 会话将结束,我以常规方式运行的 Node 脚本也将结束。

【问题讨论】:

  • 您可以使用tophtop 命令来查看您的RAM 和CPU 在哪里使用,然后您可能会终止该进程
  • @ArifKhan 但是我真的不想手动终止进程。我正在为 forever 寻找一种方法来杀死它不再使用的东西。

标签: node.js ubuntu forever


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-23
    • 2015-10-18
    • 1970-01-01
    • 2011-07-21
    • 2013-08-27
    • 2021-01-14
    • 2012-03-11
    • 1970-01-01
    相关资源
    最近更新 更多