为什么在承受超过32000个并发连接的压力后,proxmox / lxc上的node.js会锁定?

时间:2019-02-01 17:08:24

标签: node.js lxc proxmox

我一直在测试有望获得大量并发连接的节点服务器。 在第一次运行时,它可以wrk -c 32000 -d 1m -T 1m http://localhost:1234正常显示。

但是,再次运行该测试将导致大量读取错误,并且节点将不再响应任何单个请求。 另外,在刚启动的主机上运行-c 33000的主机可以一次运行将其锁定。

该测试在lxc容器中运行,但是此后在容器和主机中都存在针对Internet的套接字连接问题。

服务器很简单:

http.createServer(function (req, resp) {
  resp.writeHead(200, {'Content-Type': 'text/plain'});
  setTimeout(function(){
    resp.end('bye');
  }, 1000);
}).listen(1234);

请注意,有多个工作人员,由cluster使用书中的代码进行处理。

系统在测试期间大部分处于空闲状态,并具有大量可用RAM。 测试环境是Proxmox VE 5.2主机上的lxc容器。 它运行Linux 4.15,Debian 9和Node 10.15。 在容器ulimit -n和临时端口范围中,设置了tcp_tw_reuse

网络设置:桥接,主机配置:

iface vmbr0 inet static
        address  192.168.123.1
        netmask  255.255.255.0
        bridge-ports none
        bridge-stp off
        bridge-fd 0
        post-up echo 1 > /proc/sys/net/ipv4/ip_forward
        post-up iptables -t nat -A POSTROUTING -s '192.168.123.0/24' -o enp2s0 -j SNAT --to-source 136.xxx.xxx.xxx
        post-up iptables -t nat -A PREROUTING -i enp2s0 -p tcp --dport 1234 -j DNAT --to 192.168.123.2

我没有发现有关节点的32655 ish限制。 我需要帮助,下一步应该看..我的代码?节点?节点/集群? Proxmox? Debian? TCP设置? Linux内核?

编辑:
在运行纯Debian 9的另一台服务器上重新运行测试。
在Debian上重新创建了LXC环境并桥接了网络设置。没有毛刺
同时在proxmox主机上重新运行测试。没有毛刺。

由于故障仅在proxmox下的lxc下发生,而我实际上并不需要proxmox,因此我的解决方案是抛弃proxmox。我将失去故障环境,将无法测试进一步的想法。

0 个答案:

没有答案