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

标签 http node.js memory post memory-leaks

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 MB。

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

最佳答案

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

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

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

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

enter image description here

如您所见,内存使用率上升,直到达到触发垃圾回收的某个限制。清理完成后,使用量被重置并再次开始爬升,直到下一次触发。

关于http - node.js - 可能的 http 服务器内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12917533/

相关文章:

apache - 自制软件网站的自定义禁止页面

jquery - Rails 3.0 form_tag w/remote 不正确接受 : header

asp.net - 应用 META 标签后,IE 仍会缓存页面内容几秒钟。该怎么办?

javascript - 如何读取来自 idp 的 SAML 响应以使用户登录到应用程序

c# - Microsoft Visual C# 2008 减少加载的 dll 的数量

http - 为什么浏览器请求不通过我的代理服务器?

javascript - 无论如何我可以在node.js中获取html主体

javascript - 如何用javascript计算上周的工资?

memory - 为什么进程的地址空间分为四个段(文本、数据、堆栈和堆)?

c++ - 什么时候使用 posix_memalign/memalign?