我有带 mod_jk 的 Apache httpd。长时间空闲后,连接被终止,我遇到了这个问题:Apache 停止响应,每个 HTTP 请求都会挂起 15 分钟。我尝试关闭 mod_jk 连接池(使用 DisableReuse),问题就消失了。
Tomcat 文档中写道:
Using this option will have a strong performance penalty for Apache and Tomcat.
Use this only as a last resort in case of unfixable network problems.
If a firewall between Apache and Tomcat silently kills idle connections,
try to use the worker attribute socket_keepalive in combination with
an appropriate TCP keepalive value in your OS.
我尝试使用socket_keepalive=true,情况有所好转,但有时HTTP请求仍然会挂起15分钟。
因此,似乎没有 socket_keepalive 时 90% 的连接会断开,有 socket_keepalive 时 10% 的连接会断开,有 DisableReuse 时 0% 的连接会断开。
操作系统是 RedHat Enterprise 6.5。什么是合适的 TCP keepalive 值?以及在我的操作系统中应如何配置它才能使 socket_keepalive 正常工作?