NodeJS V8 没有进行适当的垃圾收集
NodeJS V8 not doing proper garbage collecting
我有这个简单的 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
标志的服务器,并在我将值设为 null 之后放置 global.gc()
,结果更好,但内存仍然保持在 50MB 以上。
如果您的系统有足够的可用内存,则不太可能有任何情况触发垃圾回收需求。如果您可以 运行 将内存使用率提高到最大值并继续为请求提供服务,那么显然垃圾收集工作正常,因为在分配更多内存之前需要释放内存。
您可以尝试启动一个不同的进程来故意吸收更多内存,然后再次查看原始 node.js 进程的垃圾收集是否表现得更积极。
我有这个简单的 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
标志的服务器,并在我将值设为 null 之后放置 global.gc()
,结果更好,但内存仍然保持在 50MB 以上。
如果您的系统有足够的可用内存,则不太可能有任何情况触发垃圾回收需求。如果您可以 运行 将内存使用率提高到最大值并继续为请求提供服务,那么显然垃圾收集工作正常,因为在分配更多内存之前需要释放内存。
您可以尝试启动一个不同的进程来故意吸收更多内存,然后再次查看原始 node.js 进程的垃圾收集是否表现得更积极。