Javascript 将Node.js应用程序扩展到1000秒同步连接中的10秒
我们在一个应用程序上做了一些工作,它可以让人们在互联网上发射棒球 它完全生活在亚马逊的AWS生态系统中,我们正在为一个新项目构建它。堆栈包括: -专用MongoDB和Redis服务器 -三组不同的nodejs服务器 -此外,我们还利用Amazon的API进行服务器配置和自动缩放 我们面临的问题是,我们无法模拟每个实例超过15000个并发用户(websocket连接)。我们应该得到更多;我们认为千分之十。服务器CPU使用率仅为40%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应用程序,使其能够同时连接到单个
有没有想过如何扩展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
听起来更像是一个评论,而不是一个答案:-)@Bergi:然而不久之后,KNSH给出了一个非常相似的答案,也许是受我的回答启发,但你不应该生气,因为评论也可以被提升。@ChrisG。对不起,冒犯了?谁被冒犯了?你为什么说冒犯?我很困惑,你能解释一下吗?