我们在测试的时候使用了ngx_http_upstream_check_module模块的tcp探测,tengine服务器的半打开连接数增加到2万多,导致这个原因我个人觉得是因为每一个tcp探测包都是新打开一个tcp连接,导致tcp的连接过多无法及时释放。 能不能实现tcp探测包的keepalive功能使每一个探测包都不新建tcp连接而是重复利用被打开的tcp连接。
wwwo4jvm1#
keepalive并不能完全表示TCP服务可用。请详细描述下环境,是开启tcp健康检查的tengine机器的syn_sent多?还是被检测的rs的syn_recv多?理论上,健康检查间隔较长,必然比正常业务请求少,rs不可能出现syn_recv多,是因为rs多导致tengine所在服务器syn_sent多?
7ajki6be2#
tengine服务器上的TIME_WAIT有两万多。 被探测的服务器没有看。 如果使用http探测在使用了http1.1并且开启了http的keepalive的情况下就几个tcp连接。
huwehgph3#
Good advice,it will be support future。You can try to change kernel parameters for the time beingnet.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_tw_timeout = 3
zazmityj4#
打开tcp timeout 快速回收和 tcp timeout 复用。正如 @MengqiWu 所述。因为在启用keepalive的时候,tcp三次握手只发生一次,所以只有几个tcp链接。而非keepalive的环境是没个请求都会进行三次握手。
plupiseo5#
@hjun881https://blog.csdn.net/u012566181/article/details/49968283 可以参考这个帖子
5条答案
按热度按时间wwwo4jvm1#
keepalive并不能完全表示TCP服务可用。
请详细描述下环境,是开启tcp健康检查的tengine机器的syn_sent多?还是被检测的rs的syn_recv多?
理论上,健康检查间隔较长,必然比正常业务请求少,rs不可能出现syn_recv多,是因为rs多导致tengine所在服务器syn_sent多?
7ajki6be2#
tengine服务器上的TIME_WAIT有两万多。 被探测的服务器没有看。 如果使用http探测在使用了http1.1并且开启了http的keepalive的情况下就几个tcp连接。
huwehgph3#
Good advice,it will be support future。You can try to change kernel parameters for the time being
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_timeout = 3
zazmityj4#
打开tcp timeout 快速回收和 tcp timeout 复用。正如 @MengqiWu 所述。
因为在启用keepalive的时候,tcp三次握手只发生一次,所以只有几个tcp链接。而非keepalive的环境是没个请求都会进行三次握手。
plupiseo5#
@hjun881
https://blog.csdn.net/u012566181/article/details/49968283 可以参考这个帖子