Tomcat socket.soKeepAlive默认值查询:无VM权限时如何获取JVM默认配置
关于Tomcat socket.soKeepAlive 未配置时的默认值说明
首先明确核心逻辑:JVM 没有提供可查询的系统属性来控制 Socket SO_KEEPALIVE 的默认值,这个参数的默认行为由 JDK 的 Socket 实现固定,和操作系统无关。
具体确认方法:
- 所有主流版本的 OpenJDK/Oracle JDK(JDK 6 及更高版本)中,
java.net.Socket类的默认实现硬编码了 SO_KEEPALIVE 初始值为false,即默认关闭 TCP 保活探测,你可以直接查阅对应版本 JDK 的java.net.Socket源码确认该逻辑。 - 商用发行版 JDK(IBM J9、Azul Zulu 等)的 Socket 实现均与 OpenJDK 标准对齐,默认 SO_KEEPALIVE 值同样为
false,不存在特殊修改。 - 若后续你需要开启 SO_KEEPALIVE,直接在 Tomcat 的 HTTP 连接器配置中显式设置
socket.soKeepAlive="true"即可,无需依赖默认值。
额外补充(开启 SO_KEEPALIVE 后的生效参数):
如果开启了 SO_KEEPALIVE,后续的保活探测间隔、探测次数、空闲触发时间等参数,由操作系统的TCP内核参数决定,常见操作系统默认值如下:
- Linux 系统默认:tcp_keepalive_time=7200秒(空闲2小时后发起探测)、tcp_keepalive_intvl=75秒、tcp_keepalive_probes=9次
- Windows 系统默认:KeepAliveTime=7200秒、KeepAliveInterval=1秒、TcpMaxDataRetransmissions=5次
内容的提问来源于stack exchange,提问作者Erric
相关产品推荐
相关产品推荐

