我在 Tomcat 前面安装了 apache,使用mod_rewrite
和mod_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 时这才会起作用。