【发布时间】: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.close 和 process.exit 来确保从我的脚本中删除所有内容。但是,即使在该 RAM 被取走之后。现在我知道永远会在它被杀死后再次运行该脚本。所以我的问题是:
- 如何告诉永远不要在脚本完成后再次执行?
- 如何正确地永久停止,以便停止后不占用任何 RAM?
我为此使用 forever 包的原因是因为我的脚本需要大量时间来完成它的工作,并且我的 SSH 会话将结束,我以常规方式运行的 Node 脚本也将结束。
【问题讨论】:
-
您可以使用
top和htop命令来查看您的RAM 和CPU 在哪里使用,然后您可能会终止该进程 -
@ArifKhan 但是我真的不想手动终止进程。我正在为
forever寻找一种方法来杀死它不再使用的东西。