net.ipv4.tcp_keepalive_time = 60
net.ipv4.tcp_keepalive_intvl = 5
net.ipv4.tcp_keepalive_probes = 3
分别表示什么意思
这些参数是用于配置Linux内核TCP层的Keepalive机制,它们控制TCP连接的保活时间和保活探测参数。具体来说:
- net.ipv4.tcp_keepalive_time 表示在TCP连接空闲多长时间后开始发送保活探测包(单位:秒)。默认值为7200秒(2小时),如果将其设置为60秒,则表示在TCP连接空闲60秒后开始发送保活探测包。
- net.ipv4.tcp_keepalive_intvl 表示每次发送保活探测包的时间间隔(单位:秒)。默认值为75秒,如果将其设置为5秒,则表示每隔5秒发送一次保活探测包。
- net.ipv4.tcp_keepalive_probes 表示发送保活探测包的最大次数。默认值为9次,如果将其设置为3次,则表示最多发送3次保活探测包。
当TCP连接处于空闲状态时,TCP Keepalive机制会定期发送保活探测包,以检测连接是否仍然可用。如果连续发送保活探测包的次数超过了指定的最大次数,则认为连接已经失效,连接将被关闭。这些参数可以根据应用程序的需求进行调整。
如果想长时间连接不关闭,要怎么设置
如果您想让TCP连接保持长时间不关闭,您可以将TCP Keepalive机制的相关参数设置为较大的值。以下是一些建议的参数设置:
net.ipv4.tcp_keepalive_time = 7200(单位:秒,即2小时):将TCP连接空闲时开始发送保活探测包的时间间隔设置为较长的时间,以延长连接保活时间。
net.ipv4.tcp_keepalive_intvl = 120(单位:秒,即2分钟):将每次发送保活探测包的时间间隔设置为较长的时间,以减少网络流量和系统负担。
net.ipv4.tcp_keepalive_probes = 10:将最大保活探测包发送次数设置为较大的值,以确保TCP连接在长时间内不会被关闭。
请注意,如果您使用的是高负载的应用程序,建议根据实际情况调整这些参数,以确保系统性能和网络流量不会受到影响。另外,这些参数的修改需要root权限,可以通过编辑 /etc/sysctl.conf 文件来永久生效。
计算公式
根据给出的三个参数:
net.ipv4.tcp_keepalive_time:TCP 连接空闲多久开始发送 keepalive 包,单位为秒,默认为 7200 秒(即 2 小时)。
net.ipv4.tcp_keepalive_intvl:两次 keepalive 包之间的时间间隔,单位为秒,默认为 75 秒。
net.ipv4.tcp_keepalive_probes:未收到响应的 keepalive 包重试次数,默认为 9 次。
可得出以下公式:
最长空闲连接时间 = tcp_keepalive_time + (tcp_keepalive_intvl × tcp_keepalive_probes)
代入数值:
最长空闲连接时间 = 7200 + (120 × 10) = 8400 秒(即 2 小时 20 分钟)
保活时间怎么理解
在TCP/IP网络中,当两台主机建立了TCP连接后,如果在一段时间内没有数据传输,可能会出现网络故障导致连接中断。为了避免这种情况的发生,TCP协议提供了Keepalive机制,它会定期发送一些探测数据包来检测连接是否仍然存活。保活时间就是指在TCP连接空闲多长时间后开始发送保活探测包的时间间隔。
当一个TCP连接处于空闲状态时,保活时间就开始计时。一旦经过了指定的时间间隔,TCP层就会发送一个探测包,以确认连接是否仍然存活。如果没有收到对方的响应,则会继续发送探测包,直到达到最大探测次数,如果还没有响应,则认为连接已经失效,TCP连接就会被关闭。
保活时间的设置可以根据应用程序的需求进行调整。如果需要在TCP连接空闲的情况下保持长时间不关闭,可以将保活时间设置为较长的时间。如果需要及时释放TCP连接资源,可以将保活时间设置为较短的时间。需要注意的是,保活时间设置过长可能会增加网络流量和系统负担。
这些参数都是用于Linux内核TCP层的网络配置,它们可以对TCP连接的建立、维护和关闭等方面进行调整。具体来说:
- net.ipv4.tcp_max_syn_backlog 表示TCP SYN队列的最大长度,它限制了同时尝试建立连接的数量。默认值为128,如果将其设置为2000,则表示系统可以同时处理2000个尝试建立连接的请求。
- net.ipv4.tcp_tw_reuse 表示是否启用TIME-WAIT套接字重用,即在连接关闭后等待2MSL(Maximum Segment Lifetime)时间后,将TIME-WAIT套接字重新分配给新的连接。默认值为0(禁用),如果将其设置为1,则表示启用TIME-WAIT套接字重用。
- net.ipv4.tcp_syn_retries 表示TCP连接建立时的最大重试次数。默认值为5,如果将其设置为3,则表示最多重试3次。
- net.ipv4.tcp_retries2 表示TCP连接断开时的最大重试次数。默认值为15,如果将其设置为5,则表示最多重试5次。
- net.ipv4.tcp_slow_start_after_idle 表示是否在TCP连接空闲一段时间后启用TCP慢启动机制。默认值为1(启用),如果将其设置为0,则表示禁用TCP慢启动机制。
这些参数的设置可以根据实际情况进行调整,以提高系统性能和网络连接的稳定性。例如,将TCP SYN队列长度增加可以缓解网络连接的瓶颈,启用TIME-WAIT套接字重用可以减少TCP连接资源的浪费,调整TCP连接建立和断开时的重试次数可以提高连接的成功率,禁用TCP慢启动机制可以加速TCP连接的传输速度等。
对应LightDB相关参数
lightdb@postgres=# show %timeout%; name | setting | description -------------------------------------+---------+------------------------------------------------------------------------------------------- archive_timeout | 0 | Forces a switch to the next WAL file if a new file has not been started within N seconds. authentication_timeout | 1min | Sets the maximum allowed time to complete client authentication. checkpoint_timeout | 30min | Sets the maximum time between automatic WAL checkpoints. cron.linux_task_running_timeout | 30 | Maximum timeout of execution that each linux task can run. cron.task_running_timeout | 180 | Maximum timeout of execution that each task can run. deadlock_timeout | 1s | Sets the time to wait on a lock before checking for deadlock. idle_in_transaction_session_timeout | 0 | Sets the maximum allowed duration of any idling transaction. lock_timeout | 0 | Sets the maximum allowed duration of any wait for a lock. statement_timeout | 0 | Sets the maximum allowed duration of any statement. tcp_user_timeout | 0 | TCP user timeout. wal_receiver_timeout | 1min | Sets the maximum wait time to receive data from the sending server. wal_sender_timeout | 1min | Sets the maximum time to wait for WAL replication. (12 rows) lightdb@postgres=# show %tcp%; name | setting | description -------------------------+---------+---------------------------------------------- tcp_keepalives_count | 5 | Maximum number of TCP keepalive retransmits. tcp_keepalives_idle | 300 | Time between issuing TCP keepalives. tcp_keepalives_interval | 30 | Time between TCP keepalive retransmits. tcp_user_timeout | 0 | TCP user timeout. (4 rows)
复制
解决(案例一)
如果idle_in_transaction_session_timeout为默认3min则
vim $LTDATA/lightdb.conf
## 最后追加如下参数
idle_in_transaction_session_timeout = 0
##然后
lt_ctl -D $LTDATA reload
复制