我在 Tomcat 前面有 apache,在直接提供静态内容的同时使用mod_rewrite
和mod_proxy
中继请求。
Tomcat 服务器可能会陷入困境并停止响应,或者只是简单地崩溃。我的问题是,在这些情况下,它会使用 apache httpd。即使我设置了Tomcat,它也不会恢复。
发生这种情况时,让 apache 再次工作的唯一方法是发出停止命令,然后发出kill -9
剩余的 apache 进程,最近我还必须运行ipcrm
以删除信号量,否则我会收到“设备上没有剩余空间”错误。
我的猜测是,所有 apache 的工作人员都成为代理线程,等待超时,而没有其他服务。
我不想更改ProxyTimeout
,因为在正常操作期间,某些请求确实需要很长时间。但是我想要一种方法来告诉 apache 停止它现在拥有的所有等待代理请求并重新开始。
有这样的事情,还是有其他方法我应该解决这个问题?
我正在使用 ubuntu 8.04。
您可以尝试使用 mod_jk 而不是 mod_proxy。mod_jk 允许您配置与 tomcat 的最大连接数。在您的workers.properties 文件中使用:
您使用的值应低于 Apache 配置中的最大连接数。希望应该发生的是,一旦该数量的连接正在等待 tomcat,任何更多的请求都将返回 500 错误,但您仍然有线程可以服务其他请求。
有一条注释说,如果您使用的是 prefork MPM,那么您不应该将此值设置为大于 1,因此这仅在您使用线程 MPM 时才有效。