gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 21:56:19 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com