socket.soKeepAlive的Tomcat默认值



我试图调试一个与keep-alive/连接重置相关的问题,发现tomcat文档说:

socket.soKeepAlive:

(bool)套接字保持存活设置的布尔值(SO_KEEPALIVE)。JVM默认使用>

这不是由我正在调试的应用程序设置的。是否有一种方法可以找出jvm使用的默认值?(例如,通过检查系统属性?)

我无法通过检查实际的keep alive行为来测试该行为,因为我无法访问虚拟机。

根据更多的研究和实验来回答。

socket.soKeepAlive默认值:来自JVM文档的socketopoptions。SO_KEEPALIVE:

该套接字选项的初始值为FALSE。可随时启用或禁用套接字选项。

另需注意:

当启用SO_KEEPALIVE选项时,操作系统可以使用保持连接机制定期探测连接的另一端

根据我的理解,这意味着tomcat不会探测客户端检查已建立的连接是否处于活动状态默认

keepAliveTimeout默认值:默认值是使用为connectionTimeout属性

设置的值。在我的例子中,这没有被反映出来。connectionTimeout设置为10秒,但是tomcat响应仍然将keep alive头设置为仅5秒。

但是,我发现应用程序作者还设置了一个名为socket.soTimeout的属性为5秒,tomcat将其描述为:

这相当于标准属性connectionTimeout.

我发现当conncetionTimeoutsocket.soTimeout都设置时,socket.soTimeout优先,因为改变socket.soTimeout的值会导致keep alive头返回的值相应地改变。

最新更新