NodeJS V8没有做适当的垃圾收集

我有这个简单的http服务器

var http = require('http'); var server = http.createServer(function(request, response) { var data = []; for ( var i=0; i < 1000000; i++ ) { data.push({}); } response.end('Done'); }); server.listen(3000); 

当我启动服务器时,进程使用大约8MB的内存。 当我向服务器发出请求时,内存使用量会上升到100MB以上,并且保持这种状态。 然后,我坚持F5几秒钟,垃圾邮件的一些要求和内存使用量增长超过400MB在某些点。 当所有请求都被处理时,服务器仍然使用超过100MB。

当我提出另一个请求时,内存有时会高于或接近200MB或保持大致相同。 我让服务器运行一段时间,内存不会被释放。

我试着把date = null ,结果是一样的。 然后我试着运行带有--expose-gc标志的服务器,并且在我--expose-gc这个值之后放上global.gc() ,结果会更好,但是内存仍然保持在50MB以上。

如果你的系统有足够的可用内存,那么不太可能有任何触发垃圾回收的条件。 如果你可以将内存使用率提高到最高点,并继续提供请求,那么显然垃圾回收是有效的,因为在分配更多内存之前需要释放内存。

您可以尝试启动一个不同的进程来故意吸取更多的内存,然后再次查看是否原始node.js进程垃圾回收看起来更积极。