Em 2006 publiquei um artigo que tinha como objetivo comparar performance entre Apache e Microsoft IIS. Recebi alguns e-mails pedindo um estudo no mesmo sentido, porém voltado as linguagens Web. Atendendo a estes pedidos, e confesso, a uma curiosidade pessoal, realizei o estudo, e agora publico o resultado resumido desta pesquisa.
As linguagens comparadas foram escolhidas através de sua popularidade, segundo o site LanPop; descartadas as que não são propriamente web. As eleitas, nada fora do esperado, foram:
Como o site de referência não menciona versões e em prol de uma comparação mais ampla, versões diferentes de cada linguagem foram consideradas neste estudo.
Outro fator importante para a qualidade do resultado é o ambiente. Desta forma foi estabelecido que cada linguagem deveria rodar em seu ambiente nativo, exceto o Java (JSP). As linguagens Php e Perl, foram executadas em ambiente Linux, Asp e .NET em ambiente Windows e o Java (JSP) em ambas as plataformas. A configuração dos ambientes de execução obedeceu religiosamente a instalação padrão, levando em conta modificações que permitiam que a plataforma utilizasse todos os recursos oferecidos pelo hardware, principalmente memória ram. É sabido que existem diversos módulos e extensões que permitem a otimização de desempenho para cada linguagem, estes foram desconsiderados totalmente deste teste. A configuração do ambiente, de forma sucinta, consta abaixo:
Hardware do servidor (Windows e Linux)
- Processador Intel Xeon TM Dual (biprocessada)
- 2Gb RAM
- 2x Discos SCSI 76Gb
- Placa de Rede Gigabit
Máquinas clientes (4 PCs)
- Processador AMD Atlhon 64 2800
- 1Gb RAM
- Placa de Rede Gigabit
- Sistema operacional - Linux Debian 64
Infraestrutura de Rede
- Switch Gigabit
- Rede local
Medições
As principais medições realizadas estão detalhadas a seguir.
Tempo de resposta
- Avaliar o tempo entre a requisição e seu completo processamento
- O resultado equivale a média de tempo em relação ao número de requisições.
Utilização de CPU
- Avaliar a utilização de processamento do servidor durante as requisições.
- O resultado equivale a média de uso do processamento em relação ao número de conexões.
Utilização de RAM
- Avaliar a utilização da memória RAM durante as requisições.
- O resultado equivale a média de uso da mémoria em relação ao número de requisições em relação ao tempo de duração das requisições
Para realizar a medição, foram desenvolvidos scripts simples, onde sua função basica era o calculo do pi com 20 casas decimais e na sequência a ordenação de um array numérico com 100 posições preenchidas aletoriamente a cada requisição, utilizando o método de ordenação bubble sort
Metodologia
- Enviar um bloco de X requisições, sendo que cada uma das quatro máquinas clientes enviam a um mesmo servidor X/4 requisições. Utiliza-se o software wget para realizar cada requisição e posteriormente o software webscarab.
- Aguardar e registar o resultado.
- Estabilizar o servidor e as máquinas clientes.
- Enviar um novo bloco de requisições, conforme item 1.
Este estudo permanece em desenvolvimento, uma vez que durante os procedimentos notou-se a necessidade de realizar testes mais aprofundados considerando outos fatores e variáveis. Em breve devo publicar um artigo contendo o estudo e os resultados completos, mas por hora apresento o resumo dos resultados obtidos até aqui.


Ainda é prematura uma conclusão definitiva baseada na análise dos dados. Pelo que o mercado brasileiro fala de algumas linguagens como Java e .NET, alguns mitos e paradigmas estão caindo por terra.