还在胡乱设置连接保活时间?

博客 动态
0 193
优雅殿下
优雅殿下 2022-03-26 14:57:10
悬赏:0 积分 收藏

还在胡乱设置连接保活时间?

原创:打码日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处。

场景

写过一段时间代码后,对连接池应该不会陌生,MySQL、HttpClient、MQ等这些都需要连接池,而一般来说,服务端程序会自动断开长时间不交互的连接,但TCP连接本身是无法感知到对端关闭的,因此连接池组件一般都需要配置一个保活时间,连接池组件需要根据这个值来判断连接是否存活,那么该怎么配置此值呢?

检测服务端空闲断连时间

首先最容易想到的,就是使用抓包软件了,比如wireshark,根据TCP连接时会发SYN包,断开时会发FIN包,只需要用FIN包的时间减去SYN包的时间,就是服务端允许的空闲时间值,但这种方法稍微有点麻烦。
但我们可以使用telnet命令来检测,如下:

$ time telnet www.zhihu.com 443Trying 58.49.159.14...Connected to 1595096.sched.d0-dk.tdnsv5.com.Escape character is '^]'.Connection closed by foreign host.real    0m15.128suser    0m0.000ssys     0m0.000s

或者使用ncat命令也可以,如下:

$ time ncat --recv-only -v www.zhihu.com 443Ncat: Version 7.60 ( https://nmap.org/ncat )Ncat: Connected to 58.49.157.164:443.Ncat: 0 bytes sent, 0 bytes received in 15.12 seconds.real    0m15.132suser    0m0.000ssys     0m0.031s

其中time命令显示的real就是最大空闲时间,可见知乎TCP连接的空闲时间为15s,配置到连接池里面,配稍小一点即可,如12s

总结

后面配置连接池的连接空闲时间,就不要拍脑袋了,用用这种方法吧!

往期内容

使用socat批量操作多台机器

posted @ 2022-03-26 14:49 打码日记 阅读(0) 评论(0) 编辑 收藏 举报
回帖
    优雅殿下

    优雅殿下 (王者 段位)

    2018 积分 (2)粉丝 (47)源码

    小小码农,大大世界

     

    温馨提示

    亦奇源码

    最新会员