我一直在测试有望获得大量并发连接的节点服务器。
在第一次运行时,它可以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。我将失去故障环境,将无法测试进一步的想法。