我们有一台在 Linux 上运行的机器,我们在其中公开并使用使用 Keep Alive 设置的基于 SOAP 的 Web 服务。现在,当我们通过在Linux中设置“/proc/sys/net/ipv4/tcp_keepalive_time”来更改TCP保持活动超时值时,这会影响在此Linux机器中运行的TCP客户端和服务器吗?
附加信息:我们使用部署在 apache karaf(servicemix) 中的 apache camel-cxf 端点来公开和使用基于 SOAP 的 Web 服务。
答案1
Linux内核对TCP keepalive的内置支持影响全部启用 keepalive 的 TCP 套接字。
不过,默认情况下不启用 TCP keepalive:应用程序必须使用该setsockopt
接口显式请求对其套接字的 keepalive 控制。
netstat
您可以使用带有选项的命令来检查特定套接字上是否启用了 keepalive -o, --timers
:
这里可以看到,同一个进程可以在两种模式下打开不同的网络套接字:
# netstat -anpo | grep 8999
tcp 0 0 10.10.171.44:48744 10.10.139.30:8999 ESTABLISHED 18232/java keepalive (83.39/0/0)
# netstat -anpo | grep 8009
tcp 0 0 10.10.171.44:8009 10.10.171.42:40947 ESTABLISHED 18232/java off (0.00/0/0)