10

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 请求。POST 是一个字符串 (json),大小约为 4 兆字节。

如您所见,服务器对发布的数据不做任何事情。为了调试,我删除了所有代码并返回到什么都不做的 hello world 示例:)
当我查看节点进程的内存使用情况(在 Activity Monitor、mac 应用程序中完成)时 - 它报告说每个请求的节点服务器内存使用量都越来越大。
因此,在 20 个左右的请求之后,内存使用量翻了一番。

4

1 回答 1

21

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

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

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

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

在此处输入图像描述

如您所见,内存使用量上升,直到触发垃圾收集的某个限制。清理完毕后,重新使用并重新开始爬升,直到下一次触发。

于 2012-10-16T14:59:41.803 回答