Nodejs 重载

Tol*_*lar -1 node.js socket.io

socket.io在我的聊天系统上使用 nodejs 。我的硬件是13.6 Ghz Cpu16gb ram

当在线用户数达到时600,部分用户连接不上socket,无法发送消息,部分用户断开聊天。

我该如何解决这个问题?你对这个问题有什么看法?

zam*_*uts 7

首先,我不确定单线程的时钟速度是 13.6ghz。我假设您的 CPU 有多个内核,或者您的主板支持多个处理器插槽,而 13.6 只是一个总和。(8.2GHz 是2013 年 7 月 23 日创下世界纪录。)

其次,我会问自己为什么会发生断开连接。

  • 您是否在观察处理器负载 - 单个线程是否最大化了其处理器分配(即单个内核上的 100% 使用率)?
  • 你的内存消耗情况如何;它是否正在攀升,并且操作系统已将内存卸载到页面文件/交换分区上 - 是否存在内存泄漏?
  • 您的网络带宽是否有上限?是否达到了最大容量?

我的高级建议是:

  • 确保您的应用程序是非阻塞的。这意味着尽可能使用异步方法。然而,按照设计,所有 Node.js 的 Net 方法都是异步的。
  • 考虑集群您的应用程序并使用共享端口。这可以通过使用Cluster 的Node.js 子进程实现。这会将 CPU 上的负载分配给多个内核。您不必担心负载平衡(例如循环、最快、比率) - 处理客户端是在先可用先服务的基础上,无论哪个 Node.js 进程可以首先处理客户端的请求,都将获胜。
  • 验证您的 NIC 有足够的吞吐量来处理负载。如果它被配置为/自动协商为 10BASE-T 或 100BASE-TX 半双工,你可能会遇到麻烦。

最终,您需要执行更多诊断来隔离问题。好奇心、挖掘、耐心和研究将带您找到答案。您的问题过于开放,无法提供确切的答案 - 它更具理论性。还有太多变数无法确定确切原因。