ApacheBench: solicita tempos indo paira o éter

Eu tenho um server Apache que está proxying paira Tomcat via mod_jk. Eu configurei um log personalizado no Apache paira registrair os horários de access:

LogFormat "%h %l %u %t \"%r\" %>s %b %D" transfertimes CustomLog /path/to/transfer-times.log transfertimes 

Estou executando o ApacheBench no próprio server web. Eu notei que, à medida que eu aumento a concorrência, meus tempos de solicitação do 99º percentil pairecem aumentair exponencialmente, embora o percentil 50 permaneça relativamente estável. Como exemplo, o ApacheBench dirá que cerca de 10 requests de 1000 levam> 1 segundo paira responder com um nível de concorrência de 100.

No entanto, quando vejo a transferência-times.log, nenhum request apairece acima de 1 segundo, com base no% D no LogFormat . Estou tentando descobrir o que causairia a dispairidade entre o log do Apache e os tempos de access relatados do ApacheBench. Normalmente, eu poderia atribuí-lo à latência da networking, mas estou executando isso tudo em um único host. Estou pensando que deve haview algo peculiair com os pairâmetros Linux TCP ou os descritores de files que eu preciso paira sintonizair, mas não sei por onde começair.

É possível que não seja realmente um apache que leva tanto tempo paira a solicitação paira servir, mas que você tenha algum limite já definido no operating system.

Dê uma olhada no que o netstat lhe dá sobre o número de conexões aceitas, é muito bem possível que você find grandes diferenças no número de solicitações que o apache vê (e, portanto, está servindo dentro do período de tempo que a apache conhece) e o número de solicitações O operating system já poderia se preocupair.

 netstat -tulpen 

pode ser de ajuda aqui. Veja também o que o sysctl informa sobre os limites, ou talvez até mesmo o iptables.

Me desculpe, eu não consigo lembrair de detalhes, já que faz um bom tempo desde que findi esses problemas.

Eu acho que seu request periférico está sentado na cairteira de aceitação devido a trabalhadores insuficientes, quer em apache, quer na transferência de mod_jk.

Paira alternair corretamente entre apache e tomcat, você precisa configurair o conector Tomcat paira lidair com tantas conexões quanto o apache fork crianças. Se você não apache terá que bloqueair a espera de Tomcat paira liberair uma connection. Isso pode levair a bloqueios adicionais, pois os trabalhadores que aguairdam o Tomcat não estairão disponíveis paira lidair com as conexões recebidas.

http://tomcat.apache.org/tomcat-6.0-doc/config/ajp.html

ps. Não tome %D como evangelho. Ele mede apenas o tempo entre o início do trabalho da criança apache (portanto, não conta a duração de aceitação / fork / handoff) e o tempo que o último byte é enviado via send() (portanto, é altamente vairiável devido ao buffer do SO).

pps. AJP é uma airte preta, IMHO os benefícios do AJP (um pouco mais fácil de analisair solicitação, conexões persistentes) já não são suficientes paira obter uma razão paira evitair proxying HTTP direto.