服务器上永远的节点(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.close
和 process.exit
调用以确保从旁边杀死所有东西我的脚本。然而,即使在 RAM 被拿走之后。现在我知道永远 运行 该脚本在被杀死后会再次出现。所以我的问题是:
- 如果脚本完成,我如何告诉永远不要再次执行脚本?
- 如何正确地永远停止,以便在停止后不占用任何 RAM?
我为此使用 forever 包的原因是因为我的脚本需要很多时间来完成它所做的事情并且我的 SSH 会话会结束,我 运行 在常规中的 Node 脚本也会结束方法。
我正在使用 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.close
和 process.exit
调用以确保从旁边杀死所有东西我的脚本。然而,即使在 RAM 被拿走之后。现在我知道永远 运行 该脚本在被杀死后会再次出现。所以我的问题是:
- 如果脚本完成,我如何告诉永远不要再次执行脚本?
- 如何正确地永远停止,以便在停止后不占用任何 RAM?
我为此使用 forever 包的原因是因为我的脚本需要很多时间来完成它所做的事情并且我的 SSH 会话会结束,我 运行 在常规中的 Node 脚本也会结束方法。