所以我有这个最简单的socket.io示例:
'use strict';
const server = require('http').createServer();
const io = require('socket.io')(server);
server.listen(8080, function () {
});
io.on("connection",function(socket){
socket.on('disconnect', function (data) {
});
socket.on('sync', function(data) {
});
socket.on('enter', function(data) {
});
});
我使用一些简单的Artillery.io脚本测试了此代码,该脚本仅模拟60秒内出现的60个用户,每个脚本发送600条无意义的“同步”消息。我创建了一些堆快照,并发现(数组),(已编译代码)和(系统)构造函数一直在分配内存。实际上,我看到内存的分配和删除,但增量仍然始终为正:
在(数组)构造函数中,我看到了一些'deoptimization_data','transitions'和其他可能的内部V8对象。当我查看“保持器”选项卡时,我看到此对象被不同的node.js和socket.io对象以某种方式引用。如果您自己运行此项目并使用Chrome DevTools拍摄一些堆快照,则可能会看到相同的内容。
我也有自己的应用程序(使用我未经过artillery.io测试的使用socket.io的简单游戏),当我在玩游戏时拍摄堆快照时,我注意到我没有与自己的对象有关的内存泄漏(感谢上帝) XD),但我仍然使用相同的(数组),(编译后的代码)和(系统)构造函数来获得相同的连续内存分配。我又看到了这个'deoptimization_data','transitions'和其他V8对象。看起来像这样:
即使使用我可以创建的最简单的socket.io示例,这三个构造函数也正在慢慢消耗我的内存。它们是什么,我该如何处理以防止内存泄漏?