Maximum number of simultaneous requests e ThreadTimeOut

Ainda falando de tunning de performance no ColdFusion Server. Quando você configura o seu ColdFusion para processar X requests simultâneos (veja a opção “Maximum number of simultaneous requests” dentro de “Server Settings” no ColdFusion Administrator) você está dizendo a ele mais ou menos o seguinte: “CFServer, atenda 10 requests (por exemplo) ao mesmo tempo e mande os demais esperarem na fila”.

Como o hardware do servidor é limitado em termos de recursos (CPU principalmente), fica fácil perceber que quanto mais requests o servidor tiver que atender, simultâneamente, mais lentamente ele irá fazê-lo. Eu costumo fazer uma analogia entre um ônibus e uma Ferrari. O primeiro anda devagar (se bem que isso é relativo, no Rio os motoristas dos coletivos são loucos), mas leva 40 pessoas ao mesmo tempo. A Ferrari voa, mas leva apenas 2 passageiros. Essa analogia é válida para o setting “Maximum number of simultaneous requests”. Quanto maior o número, mais lentamente o CFServer irá atendê-los. Quanto menor, mais rápido.

Mas qual é o número ideal? O número mágico é o que faz o seu servidor atender um número adequado de requests (de acordo com o seu tráfego), sem deixar muitos esperando na fila e de forma mais rápida possível. Mistura impossível? Nem tanto. O script de CFSTAT (e o CFSTAT propriamente dito) poderá ajudá-lo a chegar à melhor métrica para o seu servidor. Veja quantos requests estão rodando simultâneamente no horário de pico, quantos estão sendo “dropeados” e chegue a um número adequado, de preferência um que não deixe ninguém perder a paciência na fila (leia-se: um request dar timeout). Mas e quando você não pode (por limitações de CPU) atender todos os requests ao mesmo tempo? Simples: aumente o tempo de permanência da fila. Você já deve estar pensando: “ah, é só aumentar aquele atributo “Timeout Requests after (seconds)” na mesma seção do CFAdministrator”?. Não, este setting é válido apenas para requests que já estão sendo processados, o que não é o caso da fila de espera para processamento. Veja mais adiante:

O ColdFusion MX 6.1 trouxe uma mudança que não me agradou muito, que foi a modificação deste tempo (que era de 350ms) para apenas 20ms, muitas vezes absolutamente insuficiente. Não entendi muito bem porquê da mudança, mas me senti aliviado por saber que podemos alterá-la.

No arquivo “jrun.xml”, normalmente localizado em “cf_rootruntimeserversdefaultSERVER-INF” você vai encontrar uma entrada como esta:

<attribute name="threadWaitTimeout">20</attribute>

Basta alterar este valor (20) para um mais elevado. Eu custumo colocar 250 (o valor é expresso em ms). É tempo suficiente para que os seus usuários não “percam a paciência” esperando na fila e você tenha muito menos requests sendo negados (JRun closed connection) apesar do tempo maior para processá-los. Fica aí a dica, especialmente para quem tem máquinas cujo tráfego é bastante elevado.