How*_*erg 7 garbage-collection memory-leaks virtual-machine node.js
我正在使用NodeJS VM模块安全地运行不受信任的代码.我注意到一个巨大的内存泄漏,每次执行需要大约10M的内存,并且不会释放它.最终,我的节点进程最终使用500M +内存.经过一番挖掘,我将问题追溯到不断创建虚拟机.为了测试我的理论,我评论了创建VM的代码.果然,内存使用率急剧下降.然后我再次取消注释代码,并在问题区域周围策略性地放置了global.gc()调用,并使用 - expose-gc标志运行节点.这大大减少了我的内存使用量并保留了功能.
使用完之后有没有更好的方法来清理VM?
我的下一个方法是缓存包含给定的不安全代码的vm并重新使用它,如果它再次看到不安全的代码(背景:我让用户为文本块编写自己的解析函数,因此,不安全的代码经常执行或执行一次,再也没见过.
一些参考代码.
async.each(items,function(i,cb){
// Initialize context...
var context = vm.createContext(init);
// Execute untrusted code
var captured = vm.runInContext(parse, context);
// This dramatically improves the usage, but isn't
// part of the standard API
// global.gc();
// Return Result via a callback
cb(null,captured);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
682 次 |
| 最近记录: |