在启动时,看来我的node.js应用程序使用了大约200MB的内存。如果我搁置一段时间,它会缩小到9MB左右。
是否可以从应用程序内执行以下操作:
- 检查应用程序正在使用多少内存?
- 请求垃圾收集器运行?
我问的原因是,我从磁盘加载了一些文件,这些文件是临时处理的。这可能会导致内存使用量激增。但是在GC运行之前,我不希望加载更多文件,否则存在内存用完的风险。
有什么建议 ?
在启动时,看来我的node.js应用程序使用了大约200MB的内存。如果我搁置一段时间,它会缩小到9MB左右。
是否可以从应用程序内执行以下操作:
我问的原因是,我从磁盘加载了一些文件,这些文件是临时处理的。这可能会导致内存使用量激增。但是在GC运行之前,我不希望加载更多文件,否则存在内存用完的风险。
有什么建议 ?
Answers:
如果使用该--expose-gc
标志启动节点进程,则可以调用global.gc()
强制节点运行垃圾回收。请记住,在GC完成之前,节点应用程序中的所有其他执行都将暂停,因此请不要过于频繁地使用它,否则会影响性能。
在从代码内进行GC调用时,您可能需要包括一个检查,这样如果在没有标志的情况下运行node,事情不会变坏:
try {
if (global.gc) {global.gc();}
} catch (e) {
console.log("`node --expose-gc index.js`");
process.exit();
}
node --v8-options
Node允许我们手动触发垃圾回收。这可以通过运行带有--expose-gc
标志(即node --expose-gc index.js
)的Node来完成。
在该模式下运行节点后,您可以随时通过global.gc()
从程序中进行调用来以编程方式触发垃圾回收。
前-
// Force garbage collection every time this function is called
try {
if (global.gc) {global.gc();}
} catch (e) {
console.log("`node --expose-gc index.js`");
process.exit();
}
我建议的一件事是,除非您在启动时就需要这些文件,否则请尝试仅在需要它们时才加载它们。
编辑:请参阅上面的帖子。
almost no memory
如果您需要此对象作为搜索建议,它如何从9MB减小到9MB?我认为那些仍然应该是终身为您的应用程序..