Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.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 将Node.js应用程序扩展到1000秒同步连接中的10秒_Javascript_Performance_Node.js_Scaling - Fatal编程技术网

Javascript 将Node.js应用程序扩展到1000秒同步连接中的10秒

Javascript 将Node.js应用程序扩展到1000秒同步连接中的10秒,javascript,performance,node.js,scaling,Javascript,Performance,Node.js,Scaling,我们在一个应用程序上做了一些工作,它可以让人们在互联网上发射棒球 它完全生活在亚马逊的AWS生态系统中,我们正在为一个新项目构建它。堆栈包括: -专用MongoDB和Redis服务器 -三组不同的nodejs服务器 -此外,我们还利用Amazon的API进行服务器配置和自动缩放 我们面临的问题是,我们无法模拟每个实例超过15000个并发用户(websocket连接)。我们应该得到更多;我们认为千分之十。服务器CPU使用率仅为40% 有没有想过如何扩展node.js应用程序,使其能够同时连接到单个

我们在一个应用程序上做了一些工作,它可以让人们在互联网上发射棒球

它完全生活在亚马逊的AWS生态系统中,我们正在为一个新项目构建它。堆栈包括:

-专用MongoDB和Redis服务器 -三组不同的nodejs服务器 -此外,我们还利用Amazon的API进行服务器配置和自动缩放

我们面临的问题是,我们无法模拟每个实例超过15000个并发用户(websocket连接)。我们应该得到更多;我们认为千分之十。服务器CPU使用率仅为40%


有没有想过如何扩展node.js应用程序,使其能够同时连接到单个服务器?

websocket是TCP连接,不是吗?您的客户将您的连接保持多久

服务器将限制您可以拥有的打开TCP连接的数量。您的操作系统还将限制一个进程在任何时候打开的文件句柄的数量

因此:

  • 服务器上的TCP开放套接字限制是多少
  • 服务器上的打开文件句柄限制是多少

我假设您开始在tcp堆栈/文件描述符上达到内核的一些默认限制。您是否尝试过任何系统级优化?如果是,哪个?

每个tcp连接都有一个文件描述符在文件操作系统中打开。将限制设置为高于所需的数值是很重要的

例如,在ubuntu中,您可以通过以下命令看到此限制:

$ulimit -a
$ulimit -n
要在Ubuntu中永久设置此限制,您需要更改文件/etc/security/limits.conf并添加以下代码行:

* soft nofile 100000
* hard nofile 100000
然后重新启动:

$sudo reboot
  • Redis正在运行吗?问题可能出在Redis上——的确如此 单螺纹。引用他们的文档:Redis主要使用单一 螺纹设计。这意味着一个进程服务于所有 客户端请求,使用一种称为多路复用的技术。这意味着 Redis可以在每一个给定的时刻服务一个请求,所以 所有请求都按顺序提供。因此进程可以在Redis队列中等待轮到它们

  • mongodb侧是否使用锁?我观察到使用mysql锁的代码存在这种性能问题:进程正在等待锁


  • 听起来更像是一个评论,而不是一个答案:-)@Bergi:然而不久之后,KNSH给出了一个非常相似的答案,也许是受我的回答启发,但你不应该生气,因为评论也可以被提升。@ChrisG。对不起,冒犯了?谁被冒犯了?你为什么说冒犯?我很困惑,你能解释一下吗?