Apache-2.2

當tomcat失敗時apache掛起

  • October 26, 2009

我在 Tomcat 前面有 apache,在直接提供靜態內容的同時使用mod_rewritemod_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 文件中使用:

worker.worker_name.connection_pool_size = 10

您使用的值應低於 Apache 配置中的最大連接數。希望應該發生的是,一旦該數量的連接正在等待 tomcat,任何更多的請求都將返回 500 錯誤,但您仍然有執行緒可以服務其他請求。

有一條註釋說,如果您使用的是 prefork MPM,那麼您不應該將此值設置為大於 1,因此這僅在您使用執行緒 MPM 時才有效。

引用自:https://serverfault.com/questions/78254