Javascript 节点服务器随机峰值达到100%,然后崩溃。如何诊断?
我正在用WebSocket和节点服务器制作一个在线浏览器游戏,如果我有大约20-30个玩家,CPU通常在2%左右,RAM为10-15%。我只是用一个便宜的数字海洋水滴来承载它 然而,似乎每20-30分钟,服务器CPU使用率就会在10秒钟内达到100%,然后最终崩溃。在那之前,CPU通常在2%左右,游戏运行非常平稳 我不知道是什么触发了这一切,因为日志中没有错误,游戏中也没有我能看到的原因。似乎只是一个随机事件,导致服务器停机 还有一些较小的峰值不会导致服务器停机,但很快就会自行解决。这是一张图片: 我不认为我在任何地方阻塞了事件循环,而且我没有任何似乎长时间运行的执行路径。从服务器到服务器的数据包通常是每个用户每秒两个,因此根本没有使用多少带宽。而服务器主要只是一个中继,除了验证之外几乎没有处理数据包,所以我不确定什么代码路径会如此密集Javascript 节点服务器随机峰值达到100%,然后崩溃。如何诊断?,javascript,node.js,websocket,profiling,cpu-usage,Javascript,Node.js,Websocket,Profiling,Cpu Usage,我正在用WebSocket和节点服务器制作一个在线浏览器游戏,如果我有大约20-30个玩家,CPU通常在2%左右,RAM为10-15%。我只是用一个便宜的数字海洋水滴来承载它 然而,似乎每20-30分钟,服务器CPU使用率就会在10秒钟内达到100%,然后最终崩溃。在那之前,CPU通常在2%左右,游戏运行非常平稳 我不知道是什么触发了这一切,因为日志中没有错误,游戏中也没有我能看到的原因。似乎只是一个随机事件,导致服务器停机 还有一些较小的峰值不会导致服务器停机,但很快就会自行解决。这是一张图片
我可以做些什么来分析这一点,并找出从何处开始调查是什么导致了这些尖峰?我想想象一下,有一些代码路径我忘记了,在加载时速度惊人地慢,或者我丢失了一个节点标志,可以解决这个问题,但我不知道。我想我可能已经找到了答案 我的游戏主要使用WebSocket,我运行的是
htop
,注意到如果有人发送大数据包(在短时间内执行大量操作),那么CPU峰值将达到100%。当我想起我在使用二进制打包机
来减少带宽使用时,我想知道为什么会这样
我尝试将解析器改为JSON
,这样就不会压缩和打包数据包,无论数据包有多大,CPU使用率始终保持在2%
所以我认为导致崩溃的原因是一个玩家在短时间内发送了大量数据,而服务器不得不打包所有数据并及时发送出去
这可能不是实际的答案,但至少需要解决一些问题。谢天谢地,游戏使用的带宽非常少,带宽不是瓶颈,所以我可以将其保留为JSON
唯一的问题是,使用JSON编码,用户可以在Chrome开发者控制台网络选项卡中读取我不喜欢的数据包。。更容易了解游戏的工作原理,并可能发现作弊/漏洞。您检查过这个吗?还是这个?您是否能够通过top或类似的方式确认加载来自节点进程?@mh cbon:top确认加载来自节点app您是否考虑过查看newrelic?可能也会有帮助。我也会查一查。