我使用forever
包来运行我的Node.js脚本。 (不是Web服务器)。但是,因为它,我有内存泄漏,甚至在停止所有进程后,我的记忆仍然存在:
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被带走之后也是如此。现在我知道永远会在它被杀死之后再次运行该脚本。所以我的问题是:
我为此永远使用包的原因是因为我的脚本需要大量时间来完成它所做的事情并且我的SSH会话将结束,因此我将以常规方式运行Node脚本。