我正在使用NodeJS VM Module安全地運行不可信代碼。我注意到每次執行都需要大約10M的內存,並且不會釋放它。最終,我的節點進程最終使用了500M以上的內存。經過一番挖掘,我將問題追溯到不斷創建虛擬機。爲了測試我的理論,我評論了創建虛擬機的代碼。果然,內存使用量急劇下降。然後,我再次取消註釋代碼,並將global.gc()調用放在問題區域周圍並使用 - expose-gc標誌運行節點。這大大減少了我的內存使用量並保留了功能。使用VM執行不可信代碼時NodeJS內存泄漏
有沒有更好的方式清理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);
});
對於https://github.com/joyent/node/issues/6552 –
只需要鏈接node.js github問題VM模塊不足以運行不受信任的代碼。嘗試在非信任部分編寫'while(true){}' –
現在可以在此處跟蹤此問題:https://github.com/nodejs/node/issues/3113到/ joyent回購的鏈接現在已過期。 – Jeffrey