Voce acabou de finalizar os ultimos retoques no seu site ou aplicacao. O cliente ja fez exaustivos testes alem dos testes realizados por voce mesmo. Tudo pronto para colocar em producao aquele codigo no qual voce passou meses trabalhando. E de repente, quando mais de 30 usuarios estao fazendo requisicoes ao mesmo tempo, as requisicoes demoram a serem respondidas. Parece que a pagina inicial do site nao vai aparecer nunca. Clicar em "salvar" naque formulario de cadastro se torna uma bela desculpa para uma pausa para cafe."Mas como isso esta acontecendo?" Voce se pergunta. Nos testes realizados as resquisicoes demoravam poucas dezenas de milisegundos. Como isso foi acontecer? Bom, provavelmente os testes foram realizados com apenas um usuario acessando o servidor, talvez dois. Com o site ou aplicacao se tornando popular varios usuarios vao fazer seu codigo ser executado em varias requisicoes ao mesmo tempo. E e neste momento que estas supresas aparecem.Para te ajudar a tentar prever como seu codigo vai se comportar com varias requisicoes simultaneas existe uma ferramenta muito util chamada ab (Apache Benchmark), sobre a qual ja falei aqui. Em uma maquina com gerenciador de pacotes como o apt-get instala-la e muito facil. Basta usar o comando:#apt-get install apache2-utilsSua execucao basica e assim:$ab -c 10 -t 30 http://localhost/sitecobaia/Este comando vai abrir 10 conexoes simultaneas e enviar requisicoes durante 30 segundos para o endereco indicado. Uma variacao deste comando e adicionar um parametro para que as conexoes sejam do tipo keep-alive(comum nas as requisicoes enviadas por navegadores).$ab -kc 10 -t 30 http://localhost/sitecobaia/Quanto aos numeros voce e livre para altera-los como quiser. Se voce for realmente sadico coloque algo como 100 requisicoes simultaneas durante 60 segundos e veja seu servidor sofrer.Um exemplo de saida ao comando ab pode ser visto abaixo:This is ApacheBench, Version 2.3 <$Revision: 655654 $>Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/Licensed to The Apache Software Foundation, http://www.apache.org/Benchmarking localhost (be patient)Finished 484 requestsServer Software: Apache/2.2.20Server Hostname: localhostServer Port: 80Document Path: /sitecobaia/Document Length: 43666 bytesConcurrency Level: 10Time taken for tests: 30.022 secondsComplete requests: 484Failed requests: 0Write errors: 0Keep-Alive requests: 0Total transferred: 21502202 bytesHTML transferred: 21134344 bytesRequests per second: 16.12 [#/sec] (mean)Time per request: 620.291 [ms] (mean)Time per request: 62.029 [ms] (mean, across all concurrent requests)Transfer rate: 699.43 [Kbytes/sec] receivedConnection Times (ms) min mean[+/-sd] median maxConnect: 0 0 0.2 0 2Processing: 349 614 108.0 608 950Waiting: 344 598 105.6 591 932Total: 349 614 108.0 608 950Percentage of the requests served within a certain time (ms) 50% 608 66% 658 75% 688 80% 707 90% 750 95% 798 98% 845 99% 875 100% 950 (longest request)Alguns numeros mostrados sao interessantes. Como por exemplo a media de requisicoes por segundo(Requests per second) que neste caso foi de 16,12. Quanto mais alto este numero mais requisicoes seu servidor servira em menos tempo. A media de tempo(Time per request) por requisicao tambem e interessante de ser observada. Neste caso temos dois valores, o primeiro, indica o tempo medio em milisegundos que o servidor demorou para responder uma unica requisicao, neste caso 620,291 ms. Ou seja com 10 conexoes concorrentes a resposta demourou em