node.js - 可能的http服务器内存泄漏

ado*_*ado 9 memory post memory-leaks http node.js

Nodejs版本:0.8.8

这是服务器:

var http = require('http');
var port = 1338;
var ip = "127.0.0.1";    

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hi there\n');
}).listen(port, ip);    
Run Code Online (Sandbox Code Playgroud)

客户端(php脚本)将发布请求卷曲到上述服务器.POST是一个字符串(json),大小约为4兆字节.

如您所见,服务器对发布的数据不执行任何操作.为了调试,我删除了所有代码并返回到hello world示例,什么也没做:)
当我看一下节点进程的内存使用情况(在Activity Monitor,mac app中完成)时 - 它会报告节点服务器内存使用量对于每个请求都要更大.
所以在20次请求之后,内存使用量翻了一番.

jsa*_*nen 20

这不是一个错误.这是正常的,预期的行为.

Node.js基于JavaScript,这是一种垃圾收集语言.简而言之,发生的事情是,内存不会立即释放,而是需要一些时间才能释放内存(例如收集垃圾).V8(节点使用)实际上有一个非常智能的垃圾收集器,"确保快速的对象分配,短暂的垃圾收集暂停,没有内存碎片".

为了演示这种行为,我在Windows上使用node.js 0.8.8运行上述脚本,并使用大型HTTP POST请求轰炸服务器.

Process Explorer显示以下内存使用情况图:

在此输入图像描述

如您所见,内存使用率上升,直到触发垃圾收集的某个限制.清理后,重置使用情况并再次开始爬升直到下一次触发.

  • 在我最初的测试中,我做了大约20个请求,内存不断上升.现在,在阅读了你的非常信息性的答案之后,我继续提出要求,大约30个左右后,gc开始了:) (2认同)