我需要配置服务器来处理超过一百万个打开的 websocket 连接(理想情况下是 1.5-2.0)。
我使用的配置来自这博文:
sysctl -w fs.file-max=12000500
sysctl -w fs.nr_open=20000500
ulimit -n 20000500
sysctl -w net.ipv4.tcp_mem='10000000 10000000 10000000'
sysctl -w net.ipv4.tcp_rmem='1024 4096 16384'
sysctl -w net.ipv4.tcp_wmem='1024 4096 16384'
sysctl -w net.core.rmem_max=16384
sysctl -w net.core.wmem_max=16384
但是,我的应用程序在达到 469219 个连接后就停止应用新连接了。我还有什么可错过的?我真的认为操作系统配置中缺少了一些东西。我们的主要应用程序是用 Java 编写的(使用 Tomcat 服务器),但我使用 NodeJS 服务器也得到了几乎相同的结果。
我们使用具有 16GB RAM 的 Ubuntu。
答案1
您的博客文章明确指出,12M 套接字使用 46GB RAM 作为 TCP 堆栈 - 除了正在运行的其他内容之外。
如果您只有 16GB,然后使用应用程序启动 Tomcat,那么您最终将没有足够的 RAM 来接受更多连接。NodeJS 的数据相似但不相等,因为可用 RAM 相似但不相等。
升级到 128 或 256GB,我想它会运行良好。