我正在尝试调试与保持活动/连接重置相关的问题,发现tomcat documentation says:
套接字. so保持活动状态:
(bool)套接字的保持活动设置(SO_KEEPALIVE)的布尔值。如果未设置,则使用JVM默认值〉。
这不是由我正在调试的应用程序设置的。有没有办法弄清楚JVM正在使用的默认值?(例如,通过检查系统属性?)
我无法通过检查实际的保持活动状态行为来测试该行为,因为我无法访问VM。
我正在尝试调试与保持活动/连接重置相关的问题,发现tomcat documentation says:
套接字. so保持活动状态:
(bool)套接字的保持活动设置(SO_KEEPALIVE)的布尔值。如果未设置,则使用JVM默认值〉。
这不是由我正在调试的应用程序设置的。有没有办法弄清楚JVM正在使用的默认值?(例如,通过检查系统属性?)
我无法通过检查实际的保持活动状态行为来测试该行为,因为我无法访问VM。
1条答案
按热度按时间jtw3ybtb1#
基于更多的研究和实验,我自己回答。
默认值
socket.soKeepAlive
:从SocketOptions.SO_KEEPALIVE的JVM文档中:此套接字选项的初始值为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头返回的值相应地更改。