我正在开发多人游戏,服务器端是用 node.js 和 box2dweb 编写的。服务器在 aws 上,它是 ubuntu 15 LTS(1GB RAM)虚拟机。当我在最初的几个小时内启动游戏时,游戏运行良好,但在〜 24 小时后,即使您在过去 22 小时内没有人玩游戏并且最后一个对象是在 23 小时前生成的,游戏也会变慢。我尝试使用 node.js 分析器,但是当我启动应用程序和应用程序工作一天后,我得到了非常相似的结果。我应该怎么办?我的问题的可能原因是什么?
我在 10 分钟内监测了函数的使用时间,结果如下:
gamelogic.update() ~40%
b2dWorld.update() ~47%
我的分析器代码:
var profiler = require('v8-profiler');
var fs = require('fs');
var startProfiling = function(duration){
profiler.startProfiling('1', true);
setTimeout(function(){
var profile1 = profiler.stopProfiling('1');
profile1.export(function(error, result) {
fs.writeFile('./profile.cpuprofile', result);
profile1.delete();
console.log("Profile saved.");
});
},duration);
}
setTimeout(function(){
startProfiling(1000 * 60 * 10);
},1000 * 60 * 60 * 24);
我应该在删除套接字之前停止监听 socekt 上的套接字事件吗?
bash shell 中的最佳结果: - 运行 10 分钟后 10% 的 CPU 使用率和 8% 的 RAM 使用率 - 运行 4 天后 80% 的 CPU 使用率和 30% 的 RAM 使用率
在测量时,我在游戏中拥有相同数量的游戏对象 + 一名连接到服务器的玩家。
我从 node.js 收到这条消息“(节点:1324)警告:检测到可能的 EventEmitter 内存泄漏。添加了 11 个 upgradeRequest 侦听器。使用发射器.setMaxListeners()来增加限制”在删除调用太多的套接字后,此停留会产生垃圾同一个听众?