我试图调试一个与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.
我发现当conncetionTimeout
和socket.soTimeout
都设置时,socket.soTimeout
优先,因为改变socket.soTimeout
的值会导致keep alive头返回的值相应地改变。