У меня есть apache перед Tomcat, используя 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. В вашем файле worker.properties используйте:
worker.worker_name.connection_pool_size = 10
Используемое вами значение должно быть меньше максимального количества подключений в вашей конфигурации Apache. Надеюсь, что должно произойти, что как только это количество подключений ожидает tomcat, любые другие запросы вернут ошибку 500, но у вас все еще останутся потоки для обслуживания других запросов.
Есть примечание о том, что если вы используете MPM prefork, вам не следует устанавливать это значение выше единицы, так что это будет работать, только если вы используете многопоточный MPM.