se, por alguma razão, o tomcat não tratar seus pedidos de ajax rapidamente, isso reduz o número de pedidos que o seu apache pode manipular. O Tomcat está configurado para lidar com 400 solicitações em paralelo, e há também um padrão acceptCount
de 100. Assim, seu tomcat pode consumir 500 solicitações - pelo menos: jvm e dependente de plataforma, pode haver ainda mais solicitações de conexão enfileiradas.
worker.worker1.reply_timeout=120000
worker.worker1.socket_timeout=150000
.. diz ao mod_jk para esperar cerca de 1.7 dias (socket_timeout está em segundos) para operações de socket e 2 minutos para pacotes de redes simples do tomcat. Você deve ajustar esses valores, para deixar o mod_jk retornar um erro o mais cedo possível se o tomcat estiver lento.
Vamos supor que suas solicitações de ajax sejam normalmente processadas em um segundo com outliers de até dois segundos. Depois de ser processado, a resposta é enviada de volta de uma só vez. Então pode-se definir worker.worker1.reply_timeout=2500
, apenas meio segundo mais. socket_timeout
pode até ser omitido, pois é apenas um valor bruto. socket_connect_timeout
, que define quanto tempo levará para conectar do apache / mod_jk ao tomcat deve ser adicionado ao worker.properties e definido como um valor muito baixo, por exemplo, 100. como ambos se sentam no mesmo servidor. Consulte O conector do Apache Tomcat - Referência para obter mais detalhes.
Cada solicitação, que vai do apache ao tomcat, conta o que você configurou com MaxClients
no httpd.conf. Quanto mais pedidos estão presos no tomcat, menos pode ser processado pelo apache para conteúdo estático. Se você desligar o tomcat nessa situação, o conteúdo estático será entregue rapidamente novamente, já que libera recursos para o processamento de pedidos no mod_jk e no apache.
Você configurou prefork.c
e worker.c
no httpd.conf ao mesmo tempo. Eu acho que prefork.c
é o ativo, como MaxClients
está definido para 512 e isso corresponderia às suas observações e à minha interpretação ..;)
Digitar o mod_jk para desistir mais cedo dos pedidos de longa duração para o tomcat pode ajudar muito, mas você também deve pensar em ajustar o número de pedidos do cliente manipulados pelo apache ( MaxClients
) e o número de pedidos que o tomcat processa ( <connector maxThreads=...
) em paralelo. Esses números devem ser equilibrados com o que acontece durante as operações normais. Algum rastreio de carregamentos de página pode ser útil para ver em que proporção esses valores devem estar. O valor absoluto depende das especificações dos servidores, da situação da rede, do número de clientes, etc.
Se o número absoluto de possíveis solicitações paralelas for baixo, os usuários reclamarão sobre cargas de páginas lentas, enquanto você não verá seu servidor com capacidade. Se for muito alto, ele usará mais memória do que o realmente necessário, até mesmo diminuirá a velocidade e não se recuperará rapidamente de problemas com sub-sistemas - por exemplo, o banco de dados. Se o apache enviar muito mais solicitações para o tomcat, pois ele será processado a tempo, você verá algumas delas expirando enquanto outras são processadas em um tempo aceitável. Começar com valores semelhantes no apache e no tomcat não é uma má idéia, desde que as configurações de tempo limite garantam que um tomcat lento ou sem resposta não seja uma pedra no pescoço do apache.