高stream量websocket / haproxy调优

我有一个pubsub应用程序(主要是聊天,但也有一些其他的好东西被发布和sub-ed太)运行在节点和socket.io。

我负载testing这个应用程序通过旋转一些其他的,真正的大型盒子,并运行我为此写的节点应用程序,产生了使用socket.io-client包进行连接的大量进程。

我发现我可以获得大约1k并发连接到一个1gig机架空间云盒子。 我们需要支持10k和100k之间的并发连接(对于特定的事件,而不是所有的时间),尽pipe如此,我把一个负载均衡器放在前面,并在大型事件之前计算出了更多的机器。 但我已经把一个haproxy框在前面,发现有2个服务器和2K用户我是金,但有4个服务器甚至3K用户是一个斗争!

我注意到,当我的负载testing开始导致大量的断开连接节点服务器正在经历非常高的CPU使用率(在90%),我觉得很奇怪,因为当2个服务器和2K用户结束了70%,其中最快速减less。

这里是我的haproxyconfiguration的一些相关的行:

mode http timeout client 86400000 timeout server 86400000 timeout connect 5000 maxconn 100000 

我也把一些内核networking调整到我的haproxy和节点框的/etc/sysctl.conf中:

 net.ipv4.tcp_tw_reuse = 1 net.ipv4.ip_local_port_range = 1024 65023 net.ipv4.tcp_max_syn_backlog = 10240 net.ipv4.tcp_max_tw_buckets = 400000 net.ipv4.tcp_max_orphans = 60000 net.ipv4.tcp_synack_retries = 3 net.core.somaxconn = 50000 net.core.netdev_max_backlog = 50000 net.ipv4.tcp_rmem = 8192 87380 8388608 net.ipv4.tcp_wmem = 8192 87380 8388608 

并且haproxy和node框在其相关的init脚本中都有ulimit -n 99999 (在启动haproxy或节点之前)

haproxy框始终在单个数字(或更less)的CPU使用率。

我的下一步应该是什么? 这里有什么东西突出作为一个问题?

如果还没有,请打开HAProxy HTTP日志logging,并查看是否可以在服务器的syslog或syslog中find断开连接的原因。 HAProxy HTTP日志格式包含请求的termination_state ,这可以帮助您指出正确的方向。