当 tomcat 失败时 apache 挂起

当 tomcat 失败时 apache 挂起

我在 Tomcat 前面安装了 apache,使用mod_rewritemod_proxy来中继请求,同时直接提供静态内容。

Tomcat 服务器可能会陷入停滞并停止响应,或者直接崩溃。我的问题是,在这些情况下,它会导致 apache httpd 随之崩溃。即使我正确设置了 Tomcat,它也不会恢复。

当这种情况发生时,让 apache 再次工作的唯一方法是发出停止命令,然后kill -9停止剩余的 apache 进程,最近我还必须运行ipcrm以删除信号量,否则我会收到“设备上没有剩余空间”错误。

我的猜测是,apache 的所有工作线程都变成了代理线程,等待超时,而没有其他任何服务。

我不想更改ProxyTimeout,因为在正常运行期间,某些请求确实需要很长时间。但我想找到一种方法来告诉 apache 停止它目前拥有的所有等待代理请求并重新开始。

有这样的事情吗,或者我应该用其他方法解决这个问题?

我正在使用 ubuntu 8.04。

答案1

您可以尝试使用 mod_jk 而不是 mod_proxy。mod_jk 允许您配置 tomcat 的最大连接数。在您的 worker.properties 文件中使用:

worker.worker_name.connection_pool_size = 10

您使用的值应低于 Apache 配置中的最大连接数。希望的是,一旦该数量的连接正在等待 tomcat,任何更多的请求都将返回 500 错误,但您仍然有剩余的线程来处理其他请求。

有一条注释说,如果您使用 prefork MPM,则不应将此值设置为高于一,因此只有在您使用线程 MPM 时这才会起作用。

相关内容