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 显示以下内存使用图:
如您所见,内存使用率上升,直到达到触发垃圾回收的某个限制。清理完成后,使用量被重置并再次开始爬升,直到下一次触发。
关于http - node.js - 可能的 http 服务器内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12917533/