Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 节点服务器随机峰值达到100%,然后崩溃。如何诊断?_Javascript_Node.js_Websocket_Profiling_Cpu Usage - Fatal编程技术网

Javascript 节点服务器随机峰值达到100%,然后崩溃。如何诊断?

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和节点服务器制作一个在线浏览器游戏,如果我有大约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?可能也会有帮助。我也会查一查。