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

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); 

客户端(PHP脚本)卷发到上述服务器的发布请求。 POST是一个string(json),大小约4兆字节。

正如你所看到的,服务器对发布的数据没有任何作用。 为了debugging,我删除了我所有的代码,然后回到hello世界的例子,什么都不做:)
当我看看节点进程的内存使用情况(在活动监视器,Mac应用程序中完成)时,它会报告节点服务器的内存使用量对于每个请求都是较大的。
所以20个请求后,内存使用量翻了一番。

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

Node.js基于JavaScript,这是一种垃圾收集语言。 总之,发生的事情是,内存不是马上释放,而是需要一段时间才能释放内存(例如垃圾被收集)。 V8(哪个节点使用)实际上有一个非常智能的垃圾收集器 ,可以“确保快速的对象分配,短暂的垃圾收集暂停,并且没有内存碎片”。

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

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

在这里输入图像描述

正如你所看到的,内存使用量增加,直到触发垃圾回收的某个限制。 清理之后,使用情况将被重置,并重新开始爬升直到下一次触发。