我在Express应用程序中有一个非常简单的上传表单。
接收表单提交的代码如下:
app.post('/import', function(req, res) {
res.render('import-complete');
});
当我启动节点服务器时,节点进程使用了60MB的内存。 提交表单后,文件上传(250MB),内存使用量增加,达到~300MB。在上传结束时,内存使用率仍为300MB而没有“下降”。
因此,在“app.post”中没有可能导致内存泄漏的代码。发生了什么事?
答案 0 :(得分:2)
您可能正在查看节点进程接收的已分配虚拟内存。由于您将250MB文件加载到内存中,因此您的节点进程将分配300 MB内存,但之后实际使用率要低得多。处理完路径后,该文件的内存会相对较快地进行垃圾回收,但即使不使用该进程,您的进程仍会进行分配。您可以分配比实际物理内存更多的虚拟内存。如果存在内存泄漏,不断使用更多文件命中该路由会增加虚拟内存。
您可以查看虚拟内存引用:What are the differences between virtual memory and physical memory?